[pmwiki-users] Hiding PTV's when using conditional markup

Eemeli Aro eemeli at gmail.com
Tue Aug 11 09:01:19 CDT 2009


2009/8/11 Graham Archer <Graham.Archer at sun.com>:
> Regarding PTV's and conditional markup.....
> I read at PmWiki/PageTextVariables-Talk that it's possible to do:
>
> LinkUrl: (:if name{$FullName}:)http://dilbert.com(:else:)[[Cookbook:Quotes]](:ifend:)
>
> {$:LinkUrl}

I'm the one who added that to the page, so probably ought to take some
responsibility here...

Thinking about this a bit more, the answer's perhaps a bit trickier
than I first thought. What's happening with the above is that the
value of LinkUrl will be set to all of '(:if
name{$FullName}:)http://dilbert.com(:else:)[[Cookbook:Quotes]](:ifend:)',
ie. the value of the conditional expression isn't evaluated until it's
used on a page, in which case it'll get evaluated for each time it's
used.

Provided that you've got $EnableRelativePageVars set to true this
should be fine, even when used from another page -- except for
conditionals such as (:if name:) and (:if group:), which will get
evaluated in the context of the including page irrelevant of
$EnableRelativePageVars.

> or in my case I can do:
>
> APACStatus:(:if equal "{$:ApprovalStatusAPAC}" "Approved"
> :)Attach:tick.png(:ifend:)
>
> {$:APACStatus}
>
> However in doing this the PTV  ( APACStatus)  in the first line is shown to
> the reader, I'd like that hidden

Hmmm. Apologies for the slight mindfuck, but the following should work
(see example near the end of <http://www.pmwiki.org/wiki/Test/Ptv> if
this gets mangled):

(:if2 false:)
APACStatus:(:if equal "{$:ApprovalStatusAPAC}"
"Approved":)Attach:tick.png(:ifend:)
(:if2end:)

or alternatively:

>>comment<<
APACStatus:(:if equal "{$:ApprovalStatusAPAC}"
"Approved":)Attach:tick.png(:ifend:)
>><<

> Therefore I would like to do something like ....
>
> (:APACStatus:(:if equal "{$:ApprovalStatusAPAC}" "Approved"
> :)Attach:tick.png(:ifend:):)
>
> {$:APACStatus}
>
> But it seems either I'm using the wrong syntax, or perhaps this is not
> possible, or at least not possible in the way I am trying!!
>
> Would appreciate any advice on this.

What you tried didn't work since you can't easily nest (:directives:)
-- they're always terminated by the first matching :) which will break
stuff if the outer directive gets evaluated first. Especially as page
text variables are read from the markup outside the normal order of
markup -> HTML transformations.

eemeli

> Thank you
>
> Graham



More information about the pmwiki-users mailing list