带有页面变量的包含指令在标记内部不起作用
Include directive with page variable doesn't work inside markup
我有一些标记,例如:
Markup('talk', '<include',
'/\(:talk:\)/i',
'MarkupTalk');
function MarkupTalk($m) {
return 'Talk page: (:include {$BaseName}-talk:)'
}
但是当我使用它时,它什么也没做!
Example text (:talk:) more text
产出
<div id="wikitext">
<p>Example text Talk page: more text</p>
几乎就好像 (:include:)
指令是一个注释!似乎 (:include:)
在其他标记中定义时不起作用。
我怎样才能让它正常工作?
这不能正常工作的原因是您的标记:
talk <include B>=><
在其依赖项之一之后进行评估:
{$var} >$[phrase] B=>>
要解决此问题,您可以更改标记的评估时间:
Markup('talk', '<{$var}',
'/\(:talk:\)/i',
'MarkupTalk');
但如果您有任何输出 ("depends on") 您的标记,这可能是不受欢迎的。相反,您可以修改函数以使用 PageVar()
function as noted in PmWiki.PageVariables,如下所示:
function MarkupTalk($m) {
global $pagename;
$pagename = ResolvePageName($pagename);
return 'Talk page: (:include '. PageVar($pagename, '$BaseName') .'-talk:)'
}
这将删除 {$var}
作为依赖项,并允许在 {$var}
之后安全地评估您的标记。
我有一些标记,例如:
Markup('talk', '<include',
'/\(:talk:\)/i',
'MarkupTalk');
function MarkupTalk($m) {
return 'Talk page: (:include {$BaseName}-talk:)'
}
但是当我使用它时,它什么也没做!
Example text (:talk:) more text
产出
<div id="wikitext">
<p>Example text Talk page: more text</p>
几乎就好像 (:include:)
指令是一个注释!似乎 (:include:)
在其他标记中定义时不起作用。
我怎样才能让它正常工作?
这不能正常工作的原因是您的标记:
talk <include B>=><
在其依赖项之一之后进行评估:
{$var} >$[phrase] B=>>
要解决此问题,您可以更改标记的评估时间:
Markup('talk', '<{$var}',
'/\(:talk:\)/i',
'MarkupTalk');
但如果您有任何输出 ("depends on") 您的标记,这可能是不受欢迎的。相反,您可以修改函数以使用 PageVar()
function as noted in PmWiki.PageVariables,如下所示:
function MarkupTalk($m) {
global $pagename;
$pagename = ResolvePageName($pagename);
return 'Talk page: (:include '. PageVar($pagename, '$BaseName') .'-talk:)'
}
这将删除 {$var}
作为依赖项,并允许在 {$var}
之后安全地评估您的标记。