Jump to content

Guy Incognito

  • Posts

  • Joined

  • Last visited

Posts posted by Guy Incognito

  1. Thanks @BrendonKoz this is useful to know/have.

    The reason I create the little module above is because we were told that Google's own widget version was going to be completely removed and that the deadline for this was only extended due to Covid. We had a few sites reliant on it, so wanted a fall back.

    It will be interesting to see whether the original widget stops working on not.

    • Like 1
  2. I created a simple translation module for a project we're currently working on and I thought I would share it in case it's useful for anyone else as it's a request we've come across a few times recently. It's a basic page translation module using Google Translate to replace their now retired embeddable page translation widget.

    The module outputs a simple, un-styled, dropdown language selector that routes the visitor to a translated version of the current page via translate.google.com. From there you can then navigate the whole site in the your language of choice. There's also a method to output a single language-specific translation URL for any supported language using the language ISO code.

    Download, usage and supported language list available on my Github here: https://github.com/mrjcgoodwin/MarkupGoogleTranslate

    Caveat 1: Google seem to be trying to encourage use of their Google Translation API, so the continued working of this module is completely at their mercy - I can imagine they may discourage this usage at some point, but who knows!

    Caveat 2: I haven't yet deciphered what all the parameters are used for in the constructed Google Translate URL. It's possible there may be some sites/scenarios where the URL doesn't work. Feel free to report if you find any issues.

    • Like 5
  3. 4 hours ago, bernhard said:

    You are not dreaming - this is already possible using RockMigrations:

        'fields' => [
            'myfield1' => [
                'type' => 'text',
                'label' => 'My field one',
            'myfield2' => [
                'type' => 'text',
                'label' => 'My field two',
        'templates' => [
            'mytemplate' => [
                'fields' => [

    If you don't like PHP arrays for whatever reason simply use json_decode( _your_fields_and_templates_as_json_string_ ) instead...

    I'll release a new version soon that makes it a lot easier to get started with RockMigrations though the API will 99% be the same as in the old module.

    Ah brilliant thanks - think this is what I was thinking of 😊.

    Nothing against php arrays either, in my mind I was thinking of JSON for some reason.

    Although I’m considering a workflow that has gulp in it anyway, so json may be involved at some point. 

  4. 16 minutes ago, kongondo said:

    Not sure if this is the one...it is about translations..


    Thanks - but I don’t think that’s the one. I think it was in one of the newsletters discussing dev branch updates. It was more along the lines of creating new templates using a text or json file to define the fields.

    Had some ideas around experimenting with this in our workflow… but now seriously beginning to wonder if I dreamed it 🤣🤣🤣


  5. I think I saw post on here or an article in the newsletter about a forthcoming feature for defining/importing templates using a JSON file… or did I completely imagine this?! 😅

    If it’s real I can’t find the info anywhere!

  6. On 1/25/2022 at 3:17 PM, Pete said:

    I still use it. I do have one workflow thing I do where I add a "keyword list" textarea field below the keywords as the SEO tool we use to generate lists of keywords for subjects spits them out one per line, so we copy and paste that into that textarea and on save I turn it into a CSV string and put it in the proper keywords field. Sounds a bit lazy but one site had hundreds of articles.

    I may also need to build a Y0ast-like page score module at some point soon too, though I think those things can be misleading as much as they can be helpful.

    We also use the Keyword field more as a reminder of keywords we're targeting a particular page at - especially as most search engines ignore this data anyway.

    • Like 2
  7. 1 hour ago, adrian said:

    Thanks @Guy Incognito I have merged your PR.

    I have switched to using SeoMaestro, but to be honest I am not particularly happy with either of these modules - both have their issues for my way of working / thinking. It will be interesting to see what RockSEO brings to the table.

    Thanks 😊.

    I will check out RockSEO. The thing that has kept us on MarkupSEO to date is the simplicity for implementation and also for clients. Combined with the changes you’ve made previously it’s pretty effective at doing what it needs to.

    I’ll have a think if there’s anything else that can be done to improve it further.

    • Like 1
  8. Hi all,
    Not sure if if everyone has jumped to SeoMaestro these days but I'm still fond of MarkupSeo and it's still live in many of our sites so I've made a few small but important tweaks based on real world usage. @adrian I've just made a pull request with these changes to your fixes branch in case others find these changes useful:

    Stopped canonical links from being able to inherit from parent pages:
    Inherited canonical links could cause problems with search engine indexing whereby you're inadvertently telling Google your new page is the same as another purely because you (or a client) missed the canonical field.

    So I think it is better for the default to be current page URL if the field is left blank rather than inherit the parent.

    Implemented handling of relative URLs in the canonical field:
    You can now use relative URLs in the canonical field for internal links. They will still render on the front end as SEO-friendly absolute URLs, but this way it is easier if you use different domains for testing or if you need to change the site domain.


    • Like 2
  9. @Krlos I agree with @bernhard - more detail is required on your constraints to really advise.

    However we've built a number of data-driven sites using PW in this way and I would say putting all pages of a specific type under one parent is my preferred approach vs nesting in multiple sub-folders. It's also more like a regular database table). You can then just use selectors to filter the output and it makes more sense if you have entities that might apply to multiple parents. E.g. a staff member that works at multiple locations.

    For those maintaining the site/data you can make it easy on them by configuring the 'family' tab for each template. So for instance, only a 'hotel' can be added as a child of 'hotels'. When an editor wants to add a new hotel they can't then accidentally use the wrong template, or put it in the wrong place. Finding an existing hotel to edit is as simple as tapping the name into the default PW search box.

    • Like 1
  10. On 1/9/2022 at 2:36 PM, rjgamer said:

    Can I change the output of each input field for Bootstrap oriented stylings? And can I output the sent data in the frontend?.

    Yes - Formbuilder has the option to output each form in adherence with a number of popular frontend frameworks - bootstrap included (see screengrab below). There's also a number of embedding options which include the option to completely customise/control the code output so you should be covered from this angle too.

    Out of curiosity, what are the shortcomings of the default comments you are looking to overcoming. If it's just styling/presentation couldn't you just modify the markup for this instead?

    Screenshot 2022-01-21 at 21.22.34.png

  11. I'm in the process using PW multisite configuration to centralise a family of sites that will be identical aside from content.

    I'm trying to create a shared folder for the main site templates and modules. It's all working fine so far but I can't get ProFields Repeater Matrix to play nice. I have my paths set up as follows in config:

    $config->paths->templates = $config->paths->root . 'shared/templates/';
    $config->urls->templates = $config->urls->root . 'shared/templates/';
    $config->paths->fieldTemplates = $config->paths->root . 'shared/templates/fields';
    $config->urls->fieldTemplates = $config->urls->root . 'shared/templates/fields';
    $config->paths->siteModules = $config->paths->root . 'shared/modules/';
    $config->urls->siteModules = $config->urls->root . 'shared/modules/';

    But the repeater matrix doesn't seem to be picking up the customer templates located in /shared/templates/fields

    In the template I have the usual:

    echo $page->render('page_blocks'); ?>

    But all I'm getting is a bullet point list of matrix block ID's. It's not rendering using the templates.

    I can force the path of page->render to use the shared folder ($config->paths->fieldTemplates.'/page_blocks.php), but then it just outputs a blank page - as if it's not finding the sub templates.


    Any ideas? 🙏

  12. 1 hour ago, heldercervantes said:

    I have to get a good grasp of what people might search for there. It's a quite specific service, so you either want to report, submit, or request stuff. Shouldn't be too hard to come up with a list of synonyms and associate that with actions. Then do the same for the various things you can report, submit or request. When a user doesn't find it, log what they searched and review that log from time to time to help fine-tune the keywords and conversation scripts.

    Of course, knowing my fellow coutrypeople, I can expect instead of "I want to {request} the {document_x}, please", someone will write "My son is going to college and in the registration process he needs a document that says I don't owe the state anything". 

    And on that basis you can signpost people too. So before you allow free type they might have to indicate an initial route by clicking a button - e.g. Do you want a) Report a problem b) Pay a bill etc etc....

    "Now tell us which service you want to pay a bill for"...(free type and match).

    Might help limit the terms they throw at it.

    • Like 1
  13. I'm trying to build a search selector that includes a checkbox multiple option field (clinicdetails_specialisms). The whole selector works fine if I don't include the checkbox field. With it included I get errors like "Error: Exception: SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters (in wire/core/PageFinder.php line 627)".

    This is the selector as it currently stands.


    I've also tried setting the specialisms field in one string rather than groups and have also tried with/without the '.title' property.

    Oddly the selector works if specialisms is the only field being searched. It seems to fail when mixed with other selectors.

    Can anyone advise what stupid mistake I'm making!

  14. Could you perhaps solve this by populating your page’s open graph (OG) tags with specific URLs rather then letting them auto populate from the actual link and then using URL segments or parameters to differentiate between real/spider visitors.

    I think by populating OG tags it will tell fb where to pull the thumbnail, description etc from even if the human visitor has to go through the verification gateway first.

  15. We have a client's Processwire site where the Pageimage::size() method has stopped working. It's creating small white PNGs in the assets folder instead of the resized image as usual.

    Their hosting was recently upgraded and switched to PHP 7.4 and I'm wondering if a they've removed a PHP package or changed a server config to cause this.
    Does anyone know if the image resizing functionality requires specific PHP modules I need to check for?

    I've checked the folder permissions on the server - this all looks fine.


  • Create New...