Hi Peter,

Thank you. I´ve read. I´ve understand something at least. :). I´ve followed your instructions. But, still... I can´t get it to work.

What I´m sure about is that in config.php I´m including my cookbook and therefor "creating" the function there.

The Markup works. I can call the function with my markup (:my_function:) and if I user "return "Hello!" at the end of the function I´m getting a "Hello!" in my broweser every time the function is called.

So far so good.

The part in my function that reads a form-field also works (havent mentioned that part before in this thread).

These to lines reads the field (with the name "form_field_name") and stores it in $retstr and returns it. The text entered in the form is then displayed when the function is clled.

main_function()
{
        $retstr = stripmagic($_REQUEST['form_field_name']);
        return $retstr;
}

Still - so far so good.

But - now I want to use that string as a PageVariabel to be displayed on any page in my wiki until it is changed by a call to the same function and replaced with the new text in the form field. Just to be clear - the text should be user uniq. I´m not trying to do anything between different users.

I'm now trying this;

main_function()
{
        global $FmtPV;

        $retstr = stripmagic($_REQUEST['form_field_name']);
        $FmtPV['$MyVariable'] = '$retstr';

        return $retstr;
}

And thereafter I try to display the PageVariabel I´ve created with;

{$MyVariable}

On the wiki-pages where I want it to be displayed...

(I´ve also tried {*MyVariable} since I somewhere read that the asterix makes the PageVariabel more global but stil with no success.)

But... this doesent work. :(

Please, kick me in the right directions... :)

Thanx in advance and regards,
/ Thomas.



At 2011-02-04 15:55, Peter Bowers wrote:
On Fri, Feb 4, 2011 at 9:12 AM, Thomas Lundgren <[email protected]> wrote:
> At 2011-02-04 05:17, Peter Bowers wrote:
>>
>> On Fri, Feb 4, 2011 at 1:04 AM, Thomas Lundgren <[email protected]>
>> wrote:
>> > On a page I call a cookbook-script-function with a markup like;
>> >
>> > (:my_function:)
>> >
>> > In the cookbook i have a function that checks the value in a form-field
>> > every time it is called and sets the result in a PageVariable.
>> >
>> > I want to use that variable on any page as any other PageVariable like;
>> >
>> > {$MyVariable}
>> >
>> > BUT. I can´t get this to work...
>> >
>> > I can use $FmtPV in config.php and in the cookbook-script and set the
>> > variabel $MyVariable. But I can´t change the variable content in the
>> > function that is called in the cookbook-script.
>>
>> A couple easy things to check right off...
>>
>> (1) Make sure you have $FmtPV declared as a global in your function
>> (2) Make sure your markup rule is ordered such that the changes you
>> are making occur before they are used (i.e., '<{$var}' or before, use
>> ?action=ruleset with diag turned on to confirm the order)
>
> Many thanks for you quick answer - but...
>
> (1) I´m declaring $FmtPV as a global in my cookbook-script (se below).

Yes, it was probably too much to hope for that we would have 2 such
easy fixes inside a couple weeks... :-)  (Although see below --
lightning *does* strike twice in the same place sometimes... :-)  )

> (2) I think I don´t understand what you are saying. :)  I don´t user
> Markup() to set the variable in any way - only to create the function that
> sets the variable.... So where and how should I use the '<{$var}' ?

Actually, no.  You're not "creating" the function at that point -- you
are "calling" the function there.  At the point when you have the line
in your config.php:
===(snip)===
include_once("$FarmD/cookbook/my_cookbook.php");
===(snip)===
...you have "created" the function.  PHP is an interpreted language
(in most scenarios) but it does all the interpretation "up front" at
the moment of include'ing or require'ing the code.  So when your
Markup says this:

> Markup('my_function', '_begin',  '/\\(:my_function(.*?):\\)/e',
> 'main_function("$1")');

You are saying "look for the pattern that looks like (:my_function
<something>:) and when you find it *call* the function as if you had
code like this:
===(snip)===
main_function("<something>");
===(snip)===

And the '_begin' says to do that at the very beginning when you've
just started processing rules.  One disadvantage of this is that if
you were to put something like this:
===(snip)===
[@
(:my_function xyz:)
@]
===(snip)===

it would be undefined as to whether your function would be run or not.
 (By standard usage it shouldn't be if enclosed with [@...@] or
[=...=] or (:markup:) [=...=] (:markupend:) or etc.

So I would change it to "<{$var}" instead of "_begin", but I doubt
that is your problem...

Where you have a problem is in your *placement* of the line:

===(snip)===
global $FmtPV;
===(snip)===

If you want it to be global for a given function, you have to declare
it global *within that function*.

Instead of this:

> global $FmtPV;
>
> function main_function( $opts )
> {
>        { code that set $ToMyVariable to what it should be... }
>
>        $FmtPV['$MyVariable'] = '$ToMyVariable'';
>
>        return;
> }

you should have this:

> function main_function( $opts )
> {
>    global $FmtPV;
>        { code that set $ToMyVariable to what it should be... }
>
>        $FmtPV['$MyVariable'] = '$ToMyVariable'';
>
>        return;
> }

I think when you fix that I think you will have good success.  Of
course, there may be other problems, but I know that's at least the
first layer of the onion...

-Peter
_______________________________________________
pmwiki-users mailing list
[email protected]
http://www.pmichaud.com/mailman/listinfo/pmwiki-users

Reply via email to