[pmwiki-users] automatic Trail with random back & next

Hans design5 at softflow.co.uk
Mon Jul 21 11:55:35 CDT 2008


Monday, July 21, 2008, 1:54:53 PM, Stéphane Heckel wrote:

> Looking for a way to implement an automatic random trail that would look
> like

> << Title of random page X | Groupname | Title of random page Y >>

> X & Y are 2 pages, selected from "Groupname"

> Each time you refresh the page, X & Y would change, ...

> Is there any cookbook I could look at ?

you could try this markup expression definition to construct what you
want. Add to config.php

## {(rndpage label trailpagename group=GroupName)}
$MarkupExpr['rndpage'] = 'MakeRandomNext($pagename, $args[0], $args[1], $argp)';
function MakeRandomNext($pagename, $label, $trailname='', $args) {
        $trail = array();
        //if no trailname make trail from all group pages
        if ($trailname=='') {
                if (isset($args['group'])) $group = $args['group'];
                else $group = PageVar($pagename, '$Group');
                $gplist = ListPages("/^$group\\..+/");
                unset($gplist[$pagename],$gplist[$group.".RecentChanges"],
                  $gplist[$group.".GroupHeader"],$gplist[$group.".GroupFooter"]);
                sort($gplist);
                foreach($gplist as $i => $p)
                        $trail[$i] = $p;
        }
        else  $trail = ReadTrail($pagename, $trailname);
        
        $cnt = count($trail);
        $i = rand(0, $cnt);
        $pn = $trail[$i];
        if ($label=='title') $label = '+';
        if ($label=='') $label = 'next';        
        if ($label=='name') $label = PageVar($pn, '$Name'); 
        return "[[".$pn."|".$label."]]";
}

This will give you a markup expression {(rndpage)}, which return a
link to a random page in the curent group. The link will be labelled
'next'.

{(rndpage 'label text')} will return a random pagelink labeled 'label
text'.

{(rndpage title)} will return a random page link labelled with th
title of the page.

{(rndpage name)} will return a random page link with the name of the
page as label.

{(rndpage label TrailPageName)} will return a random page link from
links of the trail on TrailPageName.

{(rndpage label group=GroupName)} will select random page link from
pages of group 'GroupName'.

For your trail you could just use two of these mrkup expressions:

<< {(rndpage title)} [[{$Group}/]] {(rndpage title)} >>

It is possible that both links shown will link to the same page, the
markup expression function does not keep count on names used already.

I might add this expression to the powertools recipe. I modified the
powertools {(trail )} expression to create this {(rndpage)}
expression.

  ~Hans




More information about the pmwiki-users mailing list