[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