带有页面变量的包含指令在标记内部不起作用

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} 之后安全地评估您的标记。