[pmwiki-devel] markup order for group headers
Patrick R. Michaud
pmichaud at pobox.com
Mon Jan 29 13:02:17 CST 2007
On Mon, Jan 29, 2007 at 06:43:29PM -0000, marc wrote:
> Patrick R. Michaud said...
> > If you're talking about the GroupHeader pages, then no, they're
> > run at the same time as page's markup. In fact, GroupHeader effectively
> > works by adding the equivalent of
> > (:include GroupHeader:)(:nl:)
> > to the beginning of the page text before processing the markup.
> > (The actual text to be prepended is given by $GroupHeaderFmt.)
> So, say, in GroupHeader I have
> (:auxselectdata test2 1 2 3':)
> (:auxSelect test2 test2 text='GroupHeader: ':)
> The first markup basically does:
> $AuxSelectData[test2] = array(1,2,3);
> while the second displays the dropdown, populated with $AuxSelectData
> That works (in the GroupHeader) and displays above page text, as normal.
> Now, when I add the same markup to the page (but use, say
> (:auxselectdata test2 4 5 6':) to distinguish it), ...
How is this second one "distinguished" from the first? To me they
look as though they are both doing the same thing -- i.e., setting
values for $AuxSelectData.
> the function the
> markup calls issues an error stating that an existing array cannot be
> overwritten (I do this as a security measure). But the error is raised
> within the GroupHeader. This is confirmed by the fact that both the
> dropdown on the page and in the header contain the population data from
> the page - 4,5,6 in this case.
What's the value of the $when parameter that is being used
for the (:auxselectdata:) markup? That's critically important here.
> I can extend this to include SiteHeader and exactly the same thing
> IOW, the function called by (:auxselectdata:) in the page is being
> called before both the Group and Site headers.
It's a mistake to assume that PmWiki processes pages and headers
separately. What happens is that the Group and Site headers are
inserted into the text of the page (via (:include:)) as the page
is being processed.
So, if all of the (:auxselectdata:) directives
are being processed before any of the (:input:) directives,
then each (:input:) directive is simply seeing the results of
the last (:auxselectdata:) directive encountered (i.e., the one
that is in the page, which replaced any values set by the ones
in the Group and Site).
And if the (:auxselectdata:) directive is processed before
(:include:) directives are processed, then yes, the page's values
will be evaluated first, followed by the group and site values.
So, it all comes back to the question of when the (:auxselectdata:)
markup is being processed in relation to the other (:input:) markups
(and possibly the (:include:) markups as well).
More information about the pmwiki-devel