Jump to content


  • Posts

  • Joined

  • Last visited

Posts posted by BUCKHORN

  1. Unfortunately changing this setting didn't solve my issue. Is there any security setting which would trigger a logout? I'm saving HTML source directly to a field via AJAX and I'm wondering if the source code is triggering some kind of xss security feature. 

  2. I'm doing this now. I have 10-12 partners who are businesses and freelancers. We are all on each-other's websites and white label our services so the client is billed under one business. It's a very scalable way to do business. Not only can you get prices down for your client, but you can grow your business on a moments notice to support larger clients/jobs.

    The key is finding reliable, honest people who can trust implicitly. They also need to share your values, because they are representing you and/or your business. In terms of pricing, we generally offer each other wholesale pricing (50% discount) for hourly work. Sometimes the project is managed by the professional who's providing the work and we don't deal directly with each-other's clients. Other times we deal directly with the client, which sometimes mean extra overhead and an increase in hourly rate.

    Generally I try to pay as much as I can, so I like to also do percentages on higher profit jobs. For example, if it only costs $500 dollars to pay someone hourly to complete a project, but I'm billing the client $10,000, then I would offer a percentage of the contract price based on the amount of value or time the partner is providing. In this case (using the example above) half of the contract price would go to biz expenses and labor, 30% to marketing, and 20% or $2,000 would go to the partner for their labor. The percentage I offer depends on the project and the health of my business. I also like the percentage pricing, because it's generally what I can afford, while also being the highest amount I can pay my partners. When business is good, I can offer more, when it's not good, I have to spend more on marketing so my offer is less. I go down my list of contacts, starting with the best match, until I find someone who's interested in the work at the price I can afford. 

    Send me your website or work samples. If I can utilize your talents I'll start offering you work. 


    • Like 3
  3. Annoyed the heck out of us when people did that!  >:D

    Yep, I totally get that. When our competitors would bid on our business name (or leech off of us in some fashion) we tried to hold a perspective of abundance (there's enough here for us all). It felt good that they recognized our presence in the market and it meant that we were doing things well.

    We felt there was a benefit when there was enough room in the market and both businesses are growing, but not direct competitors yet. Similar to reality show contestants who team up when there's a competitive advantage, then as the weaker competitors are weeded out and the competition goes head to head the alliances are broken. We would have been happy to see our competitors following suit (many of them did). We even let smaller companies blatantly steal our product images, the only time we cared was when they watermarked them with their own copyright message.

    This type of competition is also better for the consumer too, because businesses have to be better at what they do or their consumers will go to someone who is (it's always about providing the best value to the consumer).

  4. Thanks for the attempt sshaw...Most important thing missing is you are saving user input without first sanitizing it....Never trust user input so we must sanitize it before saving it :-)

    More here to help you choose an appropriate sanitizer:


    Thanks Kongondo!

    $input doesn't run the sanitizer automatically? I don't understand the purpose of using $input->get over $_GET if the sanitizer isn't run automatically. Does anyone know?

  5. I don't see the code above but I understand what your intention is. 

    Truth be told, I didn't fill in the code, because I'm not an expert with PW yet and have to look everything up in the API and cheat sheet. Here's an attempt at the code, however It's untested and probably won't work as is. It should get you started though. It won't take long for other users to correct any of my mistakes or provide additional help. 

    //Assuming template is called keywords and field is called counter...
    //do something if we have q in the url (q=searchstring)
    if(!empty($input->get->q)) {
      $keyword = $pages->get('template=keyword,name='.$input->get->q);
      if($keyword) {
        //update the count
        $keyword->counter = $keyword->count + 1;
      } else {
        //create a new page
        $p = new Page(); // create new page object
        $p->template = 'keyword'; // set template
        $p->parent = $pages->get('/keywords/'); // set the parent, you can also use ID
        $p->name = $input->get->q; // give it a name used in the url for the page
        $p->title = 'My New Page'; // set page title (not neccessary but recommended)
        $p->counter = 1;

    Saving pages is discussed in more detail here: https://processwire.com/talk/topic/352-creating-pages-via-api/

    logging search queries in that kind of way can also help identify searchers' commonly misspelt words. I used to work for an online sports retailer and one manufacturer (Daiwa) was commonly misspelt as 'Diawa'.

    Dave has an excellent point and doing this will increase sales. We used soundex I think. Sounds like wasn't available at the time. 

    It's also worth mentioning that sometimes you're pay per click marketing dollar will go further when bidding on commonly misspelled keywords, because your competitors haven't thought to do this (if they had the cost per click would be high). There's no point in picking just any misspelled word. You want to make sure a lot of people are searching with the misspelling and that the cost per click is low.

    We used to even bid on our competitor's business names so that when their loyal customers would search for them our site would be right below them in the sponsored results.

    There's also a difference between "business name" and "businessname.com", which people commonly type into the search engines instead of the address bar. We used to bid on our business name and domain name for this reason. We made sure we were in the sponsored results and first several results of the organic search results.

    • Like 1
  6. Thank you both for the help.

    Soma, I was going to have to hunt this down, I couldn't remember how it was done. Thanks.

    I tried render w/o the custom template path and still nothing. No error, just white screen. I don't even get an error when I remove the template.

    I echoed $child->title and it's populated so I do have child pages.

  7. If you wanted to take this further...

    Set up a template called searched_words (or whatever)

    Add an additional field called count (number field)

    template: searched_words

    fields: title, count

    in _init.php (enable this in config.php) write a few lines of code to grab the search keywords if they exist. 

    //do something if we have q in the url ($q=searchstring)

    //check to see if the searchstring is already in the database

    //if it is just increment the count field

    //if it's new add a new page and set the count to one

    The advantage here is being able to pull out all of your searched words and phrases ordering by count. You'll want to know which words are more heavily searched, because it means your users aren't finding what they are looking for. I used this technique when I was a CTO for an online retailer. It helped us understand which products we needed to carry, the language our users preferred (e.g. sneakers or shoes), and it illuminated our blind spots (e.g. if a lot of people were searching for privacy policy, we knew we either needed to add a privacy policy or make it easier for our users to find if it already existed). 

    • Like 6
  8. I'm not sure why I can't get render() to work. The include works so I know the path is correct. Any ideas?

    //assign page
    $page = $pages->get('name|domain_alias='.$host);
    //redirect to 404 if we can't find a website that matches the host
    if(empty($page)) {
        print '<h1>Page Not Found</h1>';  
    //render child pages
    foreach($page->children as $child) {
        include ($config->paths->templates.$page->theme[0]->name.'/'.$child->template.'.php');
  9. You don't need to know much php to use ProcessWire. I recommend the ProcessWire documentation which covers all the php that you'll need to know (initially). The cheatsheet is helpful too.

    This is about all the php you need to build a simple website in PW. For apps and complex websites you'll need to go further with PHP (specifically objects and methods). 



    comparison operators 


    logical operators






    find answers to specific problems (a good place to look errors when you don't know what they mean)


    • Like 7
  10. Well, to answer your original question...

    Based on my experience with both systems and a bias for PW, Drupal is actually the right tool for the job in this case. It's a pain in the ass to work with (3 year learning curve is typical) and you'll have more fun using PW (Drupal 8 is actually pretty awesome, but not stable yet). If this was a personal project where time and budget weren't a concern, I'd say use PW. You'll have a better product, because it's custom and built exactly to your needs and it's using a better framework. Since that's not the case, you may be looking at 500 hours of work and testing to implement the remaining features into PW. 

    1.  Has to be tablet and phone responsive.
    2.  Easy two level nav bar (menu)
    3.  Has to manage orders as it is a service oriented e-commerce site.  Shop for PW looks like 60% of what I need. (Drupal module exists)
    4.  Need to easily be able to ask the users a series of questions and build an “order” based on the answers.  Some of the questions will result in form changes that would ask yet different questions.  So I need to look at some good code for DB interaction.  Perhaps looking closer at Shop will ramp me up there since the DB interaction I need is all order related. (Drupal module exists)
    5.  I need to interact with a tool that will calculate mileage from address A to Address B. (Drupal module exists)
    6.  I need authorize.net payment gateway. (Drupal module exists)
    7. Standard social media like/follow
    8.  Contact Form with email to multiple email addresses.
    9.  I need to expose the Orders and other order related info to admin users that should only see the order management (none of
    the standard PW admin).  I think I understand what you'd like to do and I believe there is partial support, but not as robust as Drupal permissions (which in most cases is fine). Look at the permissions and role modules. There's a module which adds field permissions and there are some which add page specific permissions.

    • Like 2
  11. Sometimes recreating the wheel is good for innovation. Personally, I'd like to see a more modern, simple and elegant solution on the market, and what better foundation to build on than ProcessWire. That being said, the budget really is insufficient for a project of this scope, but it is a starting point. Are you willing to compromise on some features or release them as you can afford additional costs? Is this project for your company or client to use internally or are you planning on selling subscriptions to the public? 

    If you want a pretty good DIY solution, check out Podio. It will do everything you require, but it won't do it as well as a custom solution using Drupal or ProcessWire.

  12. The simplest way to do it is the first way that works.  :)

    I don't know how you have things set up, but I would use a PageField. 

    My page tree would look like this:

      Collection 1
        Story 1 (create a "story" template and add a new field to it using the PageField type. For the configuration I would choose multiplepages and checkboxes)
        Story 2
        Story 3
        Story 4
        Story 5
        Story 6
    Editions (this template can be called "editions", then in the PageField configuration I can choose this as the parent.)
      Edition 1
      Edition 2
      Edition 3

    Sorry I'm limited on time tonight and haven't explained this in detail, but hopefully this helps a little.

  13. Ryan, maybe curl, file_get_contents (using a full http:// url), or exec/wget can be used to fetch a test page. If the page returns a 404 status, mod-rewrite is off. Of course there's still a chance that one or none of these methods work, but you could try all including the env var and probably prevent a few folks from running into this problem. I'm happy to help, let me know if you want me to take a crack at this.

    • Like 1
  • Create New...