MediaWiki模板中皮肤中的元标记

假设我在MediaWiki中有一个模板,例如

<includeonly>

<div id="custom-person">

* <span>Birthday:</span> {{#if: {{{birth date|}}} | <b>{{#ol-time:|{{{birth date}}}}}</b> | — }}
{{#if: {{{full name|}}} | * <span>full name:</span> <b>{{{full name}}}</b>}}
{{#if: {{{birth place|}}} | * <span>birth place:</span> <b>{{{birth place}}}</b>}}
{{#if: {{{age|}}} | * <span> age:</span> <b>{{{age}}}</b>}}
{{#if: {{{nationality|}}} | * <span> nationality:</span> <b>{{{nationality}}}</b>}}

<div class="clear"></div>

</div>

[[Category:Person]]

__NOTOC__

</includeonly>

所有这些页面都在一个命名空间(0)中。

我需要使用此模板中的数据生成head meta标签。

我想出了如何过滤这样的页面并在SkinPerson.php中添加标题标签

if ( $out->getTitle()->getNamespace() == 0 ) {
    $out->addMeta( "description",$out->getPageTitle());
    $out->addHeadItem( 'og:description','<meta property="og:description" content="' . $out->getPageTitle() . '">');
}

但是我真的对如何插入'og:description'标签(例如{{{全名}}} + {{{age}}}之类的东西颇有兴趣?

newcivil 回答:MediaWiki模板中皮肤中的元标记

这根本不可能,我想知道您这里的用例是什么,为什么要这么做。首先进行一些解释,为什么不能以您想要的方式实现:

模板是由我们称为解析器的软件评估的。解析器正在生成wiki文本的html表示,包括所有模板等等。然后将其结果保存在ParserOutput中,并可能缓存在ParserCache中(这样就不必每次都需要再次对其进行解析)。

但是,您要在其中添加标题的皮肤直接使用了解析器的输出,因此它不再真正了解Wikitext(包括模板参数)了,因此不应该。

您要实现的目标的一种可能解决方案可能是通过提供标签扩展名来扩展Wikitext标记语言,在Wikitext解析期间进行解析,然后将标题项的值保存在数据库中。在页面输出期间,您可以再次从数据库中检索这些值,并将它们添加到所需的标题项中。在the documentation中了解有关此内容的更多信息。

除了数据库之外,还有其他方法可以将信息从解析时间获取到输出时间,这是我所不知道的。

本文链接:https://www.f2er.com/2974523.html

大家都在问