Thanks, Brian! I tried it out, and that worked great. Somehow I never
thought to check how other extensions do it...

On Mon, Feb 15, 2021 at 9:09 PM Brian Wolff <bawo...@gmail.com> wrote:

> You need to call $frame->expand( $argument ) on each argument value to get
> the actual value. #if is an example of doing this
> https://github.com/wikimedia/mediawiki-extensions-ParserFunctions/blob/master/includes/ParserFunctions.php#L118
> .
>
> This structure is to allow dead code elimination. Any argument not
> expanded is not processed which has an effect on efficiency. Most of the
> time that's not something to worry about, but it makes a big difference for
> control structures like #if.
>
>
> I probably should have said Parser::SFH_OBJECT_ARGS instead of just
> SFH_OBJECT_ARGS. I think the non class prefixed constant is deprecated.
>
> --
> Brian
>
> On Monday, February 15, 2021, Yaron Koren <ya...@wikiworks.com> wrote:
>
>> Hi Brian,
>>
>> Thank you! That... mostly worked. I added SFH_OBJECT_ARGS
>> to setFunctionHook(),and then the new $frame value passed in was indeed
>> easy to use - I just had to call $frame->getArgument('ParameterName')" to
>> get the value for that template parameter.
>>
>> Unfortunately, now I don't know how to get all of the actual arguments to
>> the parser function. Before, the call func_get_args() did that. Now,
>> neither that function, nor just getting the $args argument, seems to get
>> all the arguments - I think they get arguments that are entirely static,
>> but an argument like "flag image={{{Flag image|}}}" leads to a strange
>> structure within $args that doesn't seem to include the actual value. Is
>> there a fix for that?
>>
>> -Yaron
>>
>> On Mon, Feb 15, 2021 at 1:02 PM Brian Wolff <bawo...@gmail.com> wrote:
>>
>>> I think what you have to do is set the SFH_OBJECT_ARGS flag in the
>>> third argument of setFunctionHook.
>>>
>>> That will change the function signature of your callback to ($parser,
>>> $frame, $args). Note that $args might no longer be an array of strings but
>>> PPNode (or something) stuff you may have to call $frame->expand() on (i
>>> think. It was something like that).
>>>
>>> This new form has a PPFrame object as a second arg. You should be able
>>> to call $frame->getParent() on it  which should give you what you need.
>>>
>>> --
>>> Brian
>>>
>>> On Monday, February 15, 2021, Yaron Koren <yaro...@gmail.com> wrote:
>>>
>>>> Hi,
>>>>
>>>> When you have a parser function called from within a template, you can
>>>> of course pass in to it any template parameters, like:
>>>>
>>>> {{#flagicon:{{{Flag image|}}} }}
>>>>
>>>> (This is a silly example, but bear with me.) I would like to instead be
>>>> able to call the parser function without the parameter, like this:
>>>>
>>>> {{#flagicon:}}
>>>>
>>>> ...and have the parser function directly get the value of the "Flag
>>>> image" parameter.
>>>>
>>>> I believe this can be done within Lua: when a Lua module is invoked
>>>> from a template, it can get the names and values of the
>>>> parameters/arguments that have been passed to that template using (I
>>>> believe) code that looks like the following:
>>>>
>>>> frame = mw.getCurrentFrame()
>>>> origArgs = frame:getParent().args
>>>>
>>>> I tried to do something similar within a parser function's code, using
>>>> various calls like the following, but nothing worked:
>>>>
>>>> $frame = $parser->getPreProcessor()->newFrame()->newChild();
>>>> $args = $frame->getArguments();
>>>>
>>>> Can this be done? Ideally, it would be great to get an array of all the
>>>> arguments that have been passed to the template - but just being able to
>>>> get the value for a specified parameter name would be good enough.
>>>>
>>>> -Yaron
>>>>
>>>> --
>>>> WikiWorks · MediaWiki Consulting · http://wikiworks.com
>>>>
>>> _______________________________________________
>>> MediaWiki-l mailing list
>>> To unsubscribe, go to:
>>> https://lists.wikimedia.org/mailman/listinfo/mediawiki-l
>>>
>>
>>
>> --
>> WikiWorks · MediaWiki Consulting · http://wikiworks.com
>>
> _______________________________________________
> MediaWiki-l mailing list
> To unsubscribe, go to:
> https://lists.wikimedia.org/mailman/listinfo/mediawiki-l
>


-- 
WikiWorks · MediaWiki Consulting · http://wikiworks.com
_______________________________________________
MediaWiki-l mailing list
To unsubscribe, go to:
https://lists.wikimedia.org/mailman/listinfo/mediawiki-l

Reply via email to