[pmwiki-devel] PmWiki request

Patrick R. Michaud pmichaud at pobox.com
Tue Dec 12 08:02:27 CST 2006

On Tue, Dec 12, 2006 at 06:34:31AM -0500, The Editor wrote:
> Recently had an idea for tying zap's conditionals in PmWiki's far more
> powerful conditional system.  It would also decrease the learning
> curve as it would use more familiar syntax.
> Basically the idea is to use things like
> (:input hidden ifexists "parameter|action":) // exists must first be defined

Seems to me that

  (:if exists parameter:)(:input hidden action:)(:if:)

is only few characters longer but more consistent.  Plus you
get complex expressions for free.

> My question is this:  What function do I call to get the true/false
> returned to me.  I've looked at these two possibilities:
> function CondExpr($pagename, $condname, $condparm) {
> function CondText($pagename,$condspec,$condtext) {
> But to be honest, I can't make much heads or tails of either of them,
> but dont' think either will work for what I need, as they seem to be
> locked into returning markup only.  Is there someway PmWiki could be
> rewritten slightly to break out the part that determines if true or
> false into a separate function?  Or if what I need already exists,
> could someone point the way?

The CondExpr() function returns true or false depending on the
expression passed in $condparm.  So, it already does what you're
asking for.

The CondText() function can also do exactly what you're asking
here, and is more general.  The $condspec parameter is the 
conditional part of the (:if:) directive, the $condtext parameter
is what to return if the conditional part is true.  (If the conditional
is false, CondText() returns an empty string.)

So, if you want to use CondText as a true/false indicator, simply 
use 'true' as the $condtext parameter:

    if (CondText($pagename, $condition, true)) ...

To illustrate using the condition of your original post:

    $condition = "expr exists Group.Name && ! exists OtherGroup.Name";
    if (CondText($pagename, $condition, true)) {
      ## Group.Name exists and OtherGroup.Name doesn't


More information about the pmwiki-devel mailing list