Mediawiki 模板行为的不一致从何而来?
Where does the inconsistency in behaviour of Mediawiki templates come from?
此问题与 Mediawiki 语法及其模板和解析器函数的不一致行为有关。
当直接放在 wiki 页面中时,这两个片段都按预期工作:
{{#ifeq:{{{1|}}}|{{{2}}}|{{{1}}}}}
和
{{#ifeq:{{{1|{{FULLPAGENAME}}}}}|{{NAMESPACE:{{{1|{{FULLPAGENAME}}}}}}}:{{ROOTPAGENAME:{{{1|{{FULLPAGENAME}}}}}}}|{{{1|{{FULLPAGENAME}}}}}}}
第一个片段很简单。第二个输出页面的全名,但前提是它不是子页面。
但是,当每个片段都放在模板中时,假设第一个片段在 Template:IsEqual 中,第二个片段在 Template:IsRootPage,然后它们都包含在某个页面中,例如每个输出都是#if 测试的主题,第一个继续按预期运行,而第二个始终产生 字符串#if 语句的部分不为空。
所以:
{{#if:{{IsEqual|A|B}}|equal|unequal}}
将输出“不相等”
同时:
{{#if:{{IsRootPage}}|root|non-root}}
将始终输出“root”,即使放置在子页面中或非首页名称作为参数传递给 Template:IsRootPage,驱动模板到return 没有。
This function evaluates a test string and determines whether or not it
is empty. A test string containing only white space is considered to
be empty.
此外,即使在#ifeq 测试失败时将 Template:IsRootPage 修改为空字符串,通过在模板,即添加第三个 |其次是 nothing/space.
似乎在模板的输出和 #if 解析器函数之间发生了一些事情。
对于这种行为差异是否有已知的解释?
是否有一些语法 hack 可以使其按预期工作?
还是我遗漏了一些显而易见的东西?
编辑:此行为在 Mediawiki 1.35.5 中出现
当页面有子页面时,您的 sample template 不会 return 空字符串。它 returns <nowiki/>
其中 {{#if:<nowiki/>|yes|no}}
正确 returns yes
.
如果删除 <nowiki/>
,您将获得所需的行为。
此问题与 Mediawiki 语法及其模板和解析器函数的不一致行为有关。
当直接放在 wiki 页面中时,这两个片段都按预期工作:
{{#ifeq:{{{1|}}}|{{{2}}}|{{{1}}}}}
和
{{#ifeq:{{{1|{{FULLPAGENAME}}}}}|{{NAMESPACE:{{{1|{{FULLPAGENAME}}}}}}}:{{ROOTPAGENAME:{{{1|{{FULLPAGENAME}}}}}}}|{{{1|{{FULLPAGENAME}}}}}}}
第一个片段很简单。第二个输出页面的全名,但前提是它不是子页面。
但是,当每个片段都放在模板中时,假设第一个片段在 Template:IsEqual 中,第二个片段在 Template:IsRootPage,然后它们都包含在某个页面中,例如每个输出都是#if 测试的主题,第一个继续按预期运行,而第二个始终产生 字符串#if 语句的部分不为空。
所以:
{{#if:{{IsEqual|A|B}}|equal|unequal}}
将输出“不相等”
同时:
{{#if:{{IsRootPage}}|root|non-root}}
将始终输出“root”,即使放置在子页面中或非首页名称作为参数传递给 Template:IsRootPage,驱动模板到return 没有。
This function evaluates a test string and determines whether or not it is empty. A test string containing only white space is considered to be empty.
此外,即使在#ifeq 测试失败时将 Template:IsRootPage 修改为空字符串,通过在模板,即添加第三个 |其次是 nothing/space.
似乎在模板的输出和 #if 解析器函数之间发生了一些事情。
对于这种行为差异是否有已知的解释?
是否有一些语法 hack 可以使其按预期工作?
还是我遗漏了一些显而易见的东西?
编辑:此行为在 Mediawiki 1.35.5 中出现
当页面有子页面时,您的 sample template 不会 return 空字符串。它 returns <nowiki/>
其中 {{#if:<nowiki/>|yes|no}}
正确 returns yes
.
如果删除 <nowiki/>
,您将获得所需的行为。