【问题标题】:Include directive with page variable doesn't work inside markup包含页面变量的指令在标记中不起作用
【发布时间】:2018-09-17 23:27:00
【问题描述】:

我有一些标记,例如:

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:) 似乎不起作用。

我怎样才能使它正常工作?

【问题讨论】:

    标签: php markup transclusion pmwiki


    【解决方案1】:

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

    talk             <include         B>=><            
    

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

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多