[pmwiki-users] understanding pagelist default parameters

Petko Yotov 5ko at 5ko.fr
Fri Apr 3 02:19:26 PDT 2026


Nobody replied here or in the PITS entry so I went and added it without 
a switch.

In ParseArgs, unquoted empty arguments will now be ignored rather than 
returned as positional ones.

The documentation already says that if a search string contains "=" or 
":" it should be quoted.

Petko

-- 
If you upgrade :  https://www.pmwiki.org/Upgrades

On 23/03/2026 17:24, Petko Yotov wrote:
> Thank you Simon for opening a PITS entry. Cross-posting to the mailing
> list to give this more visibility.
> 
> Currently, a pagelist argument with no value like:
> 
>    arg_name=  or  arg_name:
>   "arg_name=" or "arg_name:"
> 
> is considered the string "arg_name=", and returned as positional, not
> named, argument. This may cause unexpected behavior for pagelists
> (search string), input elements (value or something unpredictable),
> and wikistyles (unintended class name) and in most core and custom
> directives.
> 
> This is processed in ParseArgs(), a function used very widely in
> various situations in the core and in recipes.
> 
> Simon's suggestion is, if the parsed string has something looking like
> an argument name pattern with no value:
> 
>   arg_name=
>   arg_name:
> 
> and it is NOT quoted, then this should be skipped, considered not set,
> not empty, just null/missing. This would allow for the argument to be
> defined by (:template default:), (:input default:) or in a function by
> SDVA().
> 
> I've prototyped a fix for pagelists, but I wonder if this should
> become standard.
> 
> There could be a switch as a third argument to ParseArgs(), or a
> global variable toggle, or just do it the new way. I did the first one
> but am considering the third one.
> 
> The pagelist/search documentation mentions that if a search term has
> "=" or ":" it should be quoted.
> 
> Would anyone currently use arg_name= without quotes, and need it
> intentionally as a positional argument?
> 
> Do I miss some edge that a change may break?
> 
> Petko
> 
> 
> On 22/03/2026 21:57, Simon wrote:
>> Thankyou, I now see the problem (I think?)
>> 
>> I would have expected, say, in this statement (from a SideBar)
>> (:pagelist name=A* fmt=Songbook.SideBar#listbyletter
>> category={*$:genre} :)
>> the parameter category= NOT to morph into a search string if  the page
>> text variable {*$:genre} is not defined on a page body.
>> 
>> It seems to me that if a user desires a search string of "category="
>> they should quote it.
>> 
>> thanks
>> 
>> Simon
>> 
>> On Fri, 20 Mar 2026 at 20:14, Petko Yotov <5ko at 5ko.fr> wrote:
>> 
>>> The argument category= without anything after the "=" is considered
>>> a
>>> search string and the pagelist shows pages containing the literal
>>> string
>>> "category=" in the page text.
>>> 
>>> You can use category="" but this overrides your template default.
>>> 
>>> If you populate this argument from a page text variable, there are
>>> $DefaultEmptyPageTextVars and $DefaultUnsetPageTextVars:
>>> 
>>> $DefaultUnsetPageTextVars['genre'] = '*';
>>> $DefaultEmptyPageTextVars['genre'] = '*';
>>> 
>>> This should work for the pagelist argument, but may not work well if
>>> you
>>> display the {*$:genre} variable elsewhere.
>>> 
>>> Otherwise you could have a conditional with 2 pagelists, something
>>> like
>>> this:
>>> 
>>> (:if332 empty "{*$:genre}":)
>>> (:pagelist ... category=*:)
>>> (:else332:)
>>> (:pagelist ... category="{*$:genre}":)
>>> (:if332end:)
>>> 
>>> Petko
>>> 
>>> --
>>> If you upgrade :  https://www.pmwiki.org/Upgrades
>>> 
>>> On 20/03/2026 06:27, Simon wrote:
>>>> I have a test here:
>>>> https://www.pmwiki.org/wiki/Test/PagelistWithCategoryParameter
>>>> 
>>>> It has defaults, viz
>>>> 
>>>> (:template defaults group=Cookbook order=name category="*" count=5
>>> :)
>>>> 
>>>> I'm trying to understand why
>>>> (:pagelist name=W* fmt={$FullName}#listbyletter :)
>>>> appears to give a different result from
>>>> 
>>>> (:pagelist name=W* fmt={$FullName}#listbyletter category= :)
>>>> thanks
>>>> 



More information about the pmwiki-users mailing list