Peter<div>thanks for this.</div><div>You are right that this is not as simple as it seems.</div><div>I expect that the custom page variables I create would only be created (or updated) when the page is edited and saved).</div>
<div><br></div><div><br></div><div>Until now my recipe has simply provided markup for display.</div><div>Now I want it to retain (save to the page data file) a custom page variable.</div><div>(in fact my next questions to the list are to be about how the recipe can change and save  text within the ChordPro markup)</div>
<div><br></div><div>So <span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; ">I now have some code excerpted as follows</span></div><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; "><div>
<br></div><div><div>function ChordPro_Parse($cho) {</div><div><br></div><div>// Initialise variables</div><div>  $songtitle = &#39;&#39;;</div><div><br></div><div>// later in code</div><div><div>  $songtitle = $directiveargument; // ie a value calculated during the processing of the markup</div>
<div><br></div><div>// near the end of the function</div><div><div>  # set up custom page variables</div><div>  global $FmtPV;</div><div>  $FmtPV[&#39;$SongTitle&#39;] = $songtitle;</div><div>}</div><div><br></div><div>However when I use {$SongTitle} on the page (or in a pagelist) I don&#39;t see a value being returned (ie displayed).</div>
<div><br></div><div>Your options 1 and 3 seem to indicate where I need to investigate further.</div><div><br></div><div>thanks</div><div><br></div><div>Simon</div><div><br></div><div><br></div><div><br></div></div></div></div>
</span><div><div class="gmail_quote">2009/9/27 Peter Bowers <span dir="ltr">&lt;<a href="mailto:pbowers@pobox.com">pbowers@pobox.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">On Sun, Sep 27, 2009 at 4:23 AM, Simon &lt;<a href="mailto:nzskiwi@gmail.com">nzskiwi@gmail.com</a>&gt; wrote:<br>
&gt; The variable $title is calculated from the contents processed within the<br>
&gt; ChordPro markup,<br>
&gt; and I want to make the value held in $title available in for use outside the<br>
&gt; ChordPro markup, eg in pagelists etc.<br>
<br>
</div>You&#39;ll need to carefully check the order of rule processing, then, to<br>
be certain that your ChordPro rules fire before any rules that may<br>
need to make use of the PV.  At a minimum &#39;&lt;{$var}&#39; but it may have to<br>
be earlier...<br>
<br>
But the more I think about this the more I think you are going to have<br>
to do one of 3 things:<br>
(1) Figure out how to cache the PV value in the actual page file as<br>
one of the attributes.  (This would have to do with SetProperties()<br>
and $SaveAttributes and probably some other stuff) (in which case you<br>
*will* need to edit and save each page to get a valid value for<br>
pagelists and etc.)<br>
-or-<br>
(2) Define your FmtPV so that it will actually call a function rather<br>
than just returning a value...  This function would have to calculate<br>
the value of the variable based on a pagename and any other necessary<br>
parameters.<br>
-or-<br>
(3) Go back to your original idea of creating a PTV.  This requires<br>
modifying the text of the page -- you may want to look at WritePTV()<br>
in Cookbook/Toolbox to either use that function or to get ideas to<br>
write your own.  If ChordPro wants to calculate this value and<br>
immediately use it (in addition to saving it in the pagetext) you may<br>
have to play around with caching the value...<br>
<br>
As I look at these 3 options they all look kind of complicated.<br>
Hopefully someone else on the list who has done this sort of thing<br>
before will have a better option for you, but those appear to me to be<br>
your options if you want to be able to use the PV in a pagelist or in<br>
a {Group.Page$PV} type of context.<br>
<br>
(OFF-TOPIC: While not a necessity (I&#39;m quite certain PVs maintain case<br>
sensitivity) your users may find {$title} to be a little confusing as<br>
opposed to the title of the page at {$Title}.  Perhaps {$SongTitle} or<br>
{$ChordTitle} or something might be clearer in the long-run.)<br>
<div class="im"><br>
&gt; I have added the global declaration to my function. (in front of the lines<br>
&gt; shown in my example).<br>
&gt; I&#39;m still not seeing a page variable.<br>
&gt; Do I have to tell PmWiki to &#39;update and save&#39; the page?<br>
<br>
</div>No, there&#39;s no need to tell PmWiki to &#39;update &amp; save&#39; the page unless<br>
you choose to implement option #1 above.  I assume you have your PV<br>
being displayed on the page somewhere...<br>
<br>
You may want to start with something simple, just setting<br>
<br>
$FmtPV[&#39;$mytitle&#39;] = &quot;&#39;Hello, World!&#39;&quot;;<br>
<br>
in config.php and then move it into your recipe in the mainline and<br>
then move it into the function definition, checking each time to see<br>
if you do or do not have a valid PV.  This process should narrow down<br>
where your problems are occurring.  Then if it&#39;s working in your<br>
function then you can have it set to a more complicated value.<br>
<br>
(Do make sure that your Markup has &#39;&lt;{$var}&#39; or before in the order parameter.)<br>
<font color="#888888"><br>
-Peter<br>
</font></blockquote></div><br><br clear="all"><br><br>
</div>