Jump to content

BillH

Members
  • Posts

    221
  • Joined

  • Last visited

  • Days Won

    4

Posts posted by BillH

  1. A good point @kongondo. There should be enough relevant words in the posts to bring it up in a search.

    And thanks @Robin S. I suspected there wasn't a way to automate CK Editor changes from the API, but there might have been something I hadn't cottoned on to. Using a PHP DOM parser is a good suggestion - though in this case there were only a couple of dozen instances, so I fixed them the "hard" way, editing by hand in phpMyAdmin!

    Also, thanks for the good advice on formatting species names in titles. I particularly like the reverse-markdown idea, and I've already thought of somewhere I might use it. There's another solution I'm using on another more-complex site, where I'm developing a module that allows users to enter italicized scientific names in a rich text field (the italicization is quite complex because it's botanical names with hybrids and cultivars) and hooks into page saving to keep a plain-text title and the page name up to date. But I have to be a bit careful with the module not doing unexpected things (though it's becoming quite robust), so it's not really worth installing for the simpler case at hand.

  2. A good thought about text formatters @BitPoet, which I followed up, but they turn out not to be the cause of the problem.

    However, I searched the raw data for the field in MySQL, and there, for some of the records in title_formatted, was the troublesome data. It is old tags from the previous version of the site from which the data was imported.

    For example, viewed through phpMyAdmin, the title_formatted field for a record contains:

    <a href="/site/en/tree-info/-407--i-quercus-rubra-i/"> <i>Quercus rubra</i> </a>

    However, in PW clicking on the Source button for title_formatted gives:

    <p><em>Quercus rubra</em></p>

    And more-or-less the same with the browser's Inspect Element tool.

    So, PW templates are getting the data as it is stored in the database field. But CK Editor is rendering it differently in the PW back end.

    The data was imported directly by script, and thus was not entered through CK Editor. When the page is opened in the PW back end and saved, the data is stored in the database as it rendered by CK Editor (so in my particular case the extra <a> tags are removed). However, using $page->save() from a script does not trigger the CK Editor behaviour (perhaps there's a way that it could).

    I'm wondering if it's worth re-posting this information under another title, as it really has nothing to do with finding pages and might be useful for someone.

  3. Thanks @BitPoet, you put me on the right track - though it's taken me a while to get there.

    I can now work round the problem, but it has revealed another mystery, and I'd be happier if I understood what's happening!

    It turns out the pages do all exist, but in some circumstances the wrong URL is being returned.

    So the code in my OP is not actually the relevant bit. It's the rendering of the results that caused the issue:

    if($matches->count) {
        $content = "<h2>Found {$matches->count} pages matching your query:</h2>";
        $content .= "<ul>";
        foreach($matches as $match) {
            $content .= "<li>";
    
            // THE TROUBLE OCCURS HERE when $itemTitle is set to title_formatted
            $itemTitle = $match->title_formatted ? $match->title_formatted : $match->title;
    
            $content .= "<a href='{$match->url}'>{$itemTitle}</a>";
            $content .= "</li>";
        }
        $content .= "</ul>";
    } else {
        $content = "<h2>Sorry, no results were found.</h2>";
    }

    (The <p> tags should be removed from title_formatted to give a tidy listing, but that isn't the issue here.)

    When $itemTitle is set to title_formatted, the resulting HTML is like this (I should have noticed this before!):

    <li><a href="/publications/tree-profiles/quercus-rubra/"></a><a href="/site/en/tree-info/tree-info/-407--i-quercus-rubra-i/"> <i>Quercus rubra</i> </a></li>

    I can work round this by sanitizing the text. For example, the following gets rid of the problem:

    $itemTitle = $match->title_formatted ? $sanitizer->text($match->title_formatted) : $match->title;

    And I'm sure I can easily come up with a method that keeps the <i> tags. So in terms of developing the site, problem solved.

    However, I have checked the title_formatted field, both using CK Editor's View Source and the browser's Inspect tool, and there is no sign of that extra, incorrect URL or an <a> tag.

    So I'm still really puzzled about where it's coming from!


  4. I've implemented a straightforward site search, but among the correct results it is returning pages that don't exist with strange URLs.

    If, for instance, the search is for "quercus" (it's a site about trees), some valid results are returned, e.g.:

    [domain]/publications/general-articles/quercus-tungmaiensis/

    But I also get pages that do not exist with URLs I can't explain, e.g.:

    [domain]/site/en/tree-info/tree-info/-404--i-quercus-tungmaiensis-i/

    [domain]/site/en/tree-info/-407--i--quercus-rubra-i/

    [domain]/site/en/tree-info/tree-info/-407--i-quercus-rubra-i/

    Note that there are fields in the system that contain italicised versions of the page title (e.g. "<i>Quercus rubra</i>"), and the tags may have got into the page title and name before the data was cleaned up. At one level explains the "-i-" in the invalid URLs, but it doesn't get me much further!

    The search is based closely on that in the PW default site, and the relevant code is as follows:

    $q = $sanitizer->text($input->get->q);
    
    if($q) {
        
        // Set up the search term
        $input->whitelist('q', $q);
        $q = $sanitizer->selectorValue($q);
        
        // Build the selector
        $selector = "title|main_text|item_description~=$q, has_parent!=2, limit=50";
    
        // Find the pages
        $matches = $pages->find($selector);
    
        if($matches->count) {
            // ...
            // Render the results
            // ...
        }
    }

    I may well be missing something obvious, but at the moment I'm completely puzzled.

    Anyone know what's happening?

     

  5. I thought it might be worth mentioning - given remarks above - that another three years on this feature is still getting new users :D

    This time, it's to fire off my own page-renaming module before the Custom Upload Names module makes updates when the page name changes.

    This has allowed the modules to work together really easily and, I suspect, saved quite a lot of hard work!

    • Like 4
  6. I had the same thing, and it was a result of permissions not being set properly for the dashboard.

    On the Settings tab for your Dashboard page, the role (or roles) for your user should appear under "Who can access this page?".

    If it doesn't, I'm not totally sure which of the following steps fixed it for me, but something worked!

    First, make sure the "dashboard" permission is selected for the role (the permission should have been created by the module). And of course, check the role is assigned to the relevant users. Then go to the Modules page and click the Refresh button.

    Then if that doesn't work, you may need to go to the permissions for the Admin template and under Access change "manage view and edit access" to Yes. Then hit Refresh on the modules page again.

    By the way, a quick look inside the Dashboard module indicates it uses the technique Ryan suggests at https://processwire.com/talk/topic/276-creating-new-admin-page/, which may help with debugging.

×
×
  • Create New...