带有页面变量的Include指令不在标记内工作

时间:2018-04-08 13:02:22

标签: php markup transclusion pmwiki

我有一些标记,例如:

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:)在其他标记中定义时不起作用。

如何正常运作?

1 个答案:

答案 0 :(得分:0)

这不能正常工作的原因是你的标记:

talk             <include         B>=><            

在其依赖项之一后进行评估:

{$var}           >$[phrase]       B=>>             

要解决此问题,您在评估标记时可以更改:

Markup('talk', '<{$var}',
  '/\\(:talk:\\)/i',
  'MarkupTalk');

但如果您有任何标记输出(&#34;取决于&#34;),那么这可能是不可取的。相反,您可以修改您的函数以使用PageVar()中所述的PmWiki.PageVariables函数,如下所示:

function MarkupTalk($m) {
  global $pagename;
  $pagename = ResolvePageName($pagename);
  return 'Talk page: (:include '. PageVar($pagename, '$BaseName') .'-talk:)'
}

这会删除{$var}作为依赖项,并允许在{$var}之后安全地评估您的标记。