[pmwiki-users] httpvariables / markupexprplus

Dominique Faure dominique.faure at gmail.com
Fri Oct 24 07:33:23 CDT 2008


On Thu, Oct 23, 2008 at 20:45, noskule <noskule at gmx.net> wrote:
> hi list
> I expirienced a problem using httpvariables and markupexprplus.
>
> If I include httpvariables bevor markupexpr plus, setting pv's via {(set
> xx12)} is not working, if I include it after it works.
>
> dont work:
>    $EnableExprVarManip = 1;
>    include_once("$FarmD/cookbook/markupexprplus.php");
>    include_once("$FarmD/cookbook/httpvariables.php");
>
> work:
>    include_once("$FarmD/cookbook/httpvariables.php");
>    $EnableExprVarManip = 1;
>    include_once("$FarmD/cookbook/markupexprplus.php");

The HttpVariables recipe must appear first in order to be found and
handled by MarkupExprPlus.

> When I try do do the following condition:
>
>    (:if equal "{$?count}" "":)no count, setting to {(set count 20)}
>    (:else:){(setq count {$?count} )}(:ifend:)
>
> setting $count to 20 do not work if the condition is true, see:
>
>    http://test.netstreams.org/pmwiki/index.php?n=Main.WikiSandbox

This is but the expected behaviour...
...and here's why:

The page markup is processed by successive translation passes, each of
them being dedicated to a particular markup form handling. As the
Variable/MarkupExprPlus page markup is processed *before* the
conditional markup itself, the translation saw only two successive
assignment to the same variable:

Initial:
  (:if equal "{$?count}" "":)no count, setting to {(set count 20)}
  (:else:){(setq count {$?count} )}(:ifend:)

MarkupExprPlus translation pass with ignored text enclosed in brackets:
  [(:if equal "] {$?count} [" "":)no count, setting to ] {(set count 20)}
  [(:else:)] {(setq count {$?count} )} [(:ifend:)]

Resulting in:
  {$?count} => nothing
  {(set count 20)} => {$count} set to 20
  {(setq count {$?count} )} => {(setq count )}
                            => {$count} set to nothing

This explains why I added the 'test' and the 'if' function, in order
to handle conditions during variable evaluations.
In your case, you should use

  {(set count (if (test equal "{$?count}" "") 20 {$?count} ))}

to get the expected result.

-- 
Dominique



More information about the pmwiki-users mailing list