[pmwiki-users] finding occurrences of symbols in a string

Petko Yotov 5ko at 5ko.fr
Mon Jun 12 18:08:47 PDT 2023


In this case it may be simplest to redefine the $Title page variable.

You can have a custom function that intercepts any request for $Title, 
{*$Title}, {=$Title}, [[Some-Link|+]] and that examines the situation. 
If your conditions match, it calculates the response, otherwise it 
delegates to the core FmtPageTitle() function.

Something like this:

   $FmtPV['$Title'] = 'MyFmtPageTitle(@$page["title"], $group, $name)';

   function MyFmtPageTitle($title, $group, $name) {
     # existing (:title ...:) directive in page wins
     if($title>'') return $title;

     # we only enable our function in these wikigroups
     if($group == 'MyGroup' || $group == 'MyOtherGroup') {
       $name_parts = explode('-', $name);

       # and only when there are 1+ dashes in page name
       if(count($name_parts)>=2) {

         # return the last part
         return array_pop($name_parts);
       }
     }

     # otherwise defer to core
     return FmtPageTitle($title, $name, 0);
   }

If you enable this function, you don't need a (:title...:) directive in 
the general case where the function can handle it. If you have such a 
directive, the title defined in the directive will apply.

Note that some skins use the $Titlespaced variable instead of $Title, 
and see the documentation for $EnableLinkPlusTitlespaced. To redefine 
this "spaced" page variable, set $FmtPV['$Titlespaced'], and to defer to 
the core handler, call FmtPageTitle($title, $name, 1);

Petko



On 08/06/2023 22:54, Thomas Hirtenlehner wrote:
> Hi folks!
> 
> I tried to get some order into my pages by a naming scheme that sorts
> the pages in my glossary in an alphabetical order. So something like
> this:
> 
> mygroup.foo1-bar1
> mygroup.foo1-bar2
> mygroup.foo2-bar3-foobar1
> mygroup.foo2-bar3-foobar2
> 
> now foo1-bar2 is a rather lousy title for a page, so I tried to
> automate the title by excluding foo1 from the title like this:
> 
> (:title {(substr {$Name} 13)}:)
> 
> but of course, the 13 only works iff foo1 actually has 13 letters.
> 
> Is there a way to search for "-" to feed the substring directive
> automatically with the correct number?
> 
> and if so: how do I handle cases with more than one "-" in it?
> 
> thanks in advance!
> Thomas



More information about the pmwiki-users mailing list