[pmwiki-devel] Creating a page text variable in a recipe

Simon nzskiwi at gmail.com
Sun Sep 27 13:06:59 CDT 2009


Peterthanks for this.
You are right that this is not as simple as it seems.
I expect that the custom page variables I create would only be created (or
updated) when the page is edited and saved).


Until now my recipe has simply provided markup for display.
Now I want it to retain (save to the page data file) a custom page variable.
(in fact my next questions to the list are to be about how the recipe can
change and save  text within the ChordPro markup)

So I now have some code excerpted as follows

function ChordPro_Parse($cho) {

// Initialise variables
  $songtitle = '';

// later in code
  $songtitle = $directiveargument; // ie a value calculated during the
processing of the markup

// near the end of the function
  # set up custom page variables
  global $FmtPV;
  $FmtPV['$SongTitle'] = $songtitle;
}

However when I use {$SongTitle} on the page (or in a pagelist) I don't see a
value being returned (ie displayed).

Your options 1 and 3 seem to indicate where I need to investigate further.

thanks

Simon



2009/9/27 Peter Bowers <pbowers at pobox.com>

> On Sun, Sep 27, 2009 at 4:23 AM, Simon <nzskiwi at gmail.com> wrote:
> > The variable $title is calculated from the contents processed within the
> > ChordPro markup,
> > and I want to make the value held in $title available in for use outside
> the
> > ChordPro markup, eg in pagelists etc.
>
> You'll need to carefully check the order of rule processing, then, to
> be certain that your ChordPro rules fire before any rules that may
> need to make use of the PV.  At a minimum '<{$var}' but it may have to
> be earlier...
>
> But the more I think about this the more I think you are going to have
> to do one of 3 things:
> (1) Figure out how to cache the PV value in the actual page file as
> one of the attributes.  (This would have to do with SetProperties()
> and $SaveAttributes and probably some other stuff) (in which case you
> *will* need to edit and save each page to get a valid value for
> pagelists and etc.)
> -or-
> (2) Define your FmtPV so that it will actually call a function rather
> than just returning a value...  This function would have to calculate
> the value of the variable based on a pagename and any other necessary
> parameters.
> -or-
> (3) Go back to your original idea of creating a PTV.  This requires
> modifying the text of the page -- you may want to look at WritePTV()
> in Cookbook/Toolbox to either use that function or to get ideas to
> write your own.  If ChordPro wants to calculate this value and
> immediately use it (in addition to saving it in the pagetext) you may
> have to play around with caching the value...
>
> As I look at these 3 options they all look kind of complicated.
> Hopefully someone else on the list who has done this sort of thing
> before will have a better option for you, but those appear to me to be
> your options if you want to be able to use the PV in a pagelist or in
> a {Group.Page$PV} type of context.
>
> (OFF-TOPIC: While not a necessity (I'm quite certain PVs maintain case
> sensitivity) your users may find {$title} to be a little confusing as
> opposed to the title of the page at {$Title}.  Perhaps {$SongTitle} or
> {$ChordTitle} or something might be clearer in the long-run.)
>
> > I have added the global declaration to my function. (in front of the
> lines
> > shown in my example).
> > I'm still not seeing a page variable.
> > Do I have to tell PmWiki to 'update and save' the page?
>
> No, there's no need to tell PmWiki to 'update & save' the page unless
> you choose to implement option #1 above.  I assume you have your PV
> being displayed on the page somewhere...
>
> You may want to start with something simple, just setting
>
> $FmtPV['$mytitle'] = "'Hello, World!'";
>
> in config.php and then move it into your recipe in the mainline and
> then move it into the function definition, checking each time to see
> if you do or do not have a valid PV.  This process should narrow down
> where your problems are occurring.  Then if it's working in your
> function then you can have it set to a more complicated value.
>
> (Do make sure that your Markup has '<{$var}' or before in the order
> parameter.)
>
> -Peter
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.pmichaud.com/pipermail/pmwiki-devel/attachments/20090928/09aa291d/attachment.html 


More information about the pmwiki-devel mailing list