我有一个模板,旨在将内容从另一个命名空间中的页面传入主空间;它用于将大量页面聚合到一个表中。它的基本结构是:
Template:Paget
<div class="plainlinks">
<span style="font-weight:normal; font-size:85%;">[[{{fullurl:{{{1|}}} {{{2|}}}.{{{3|}}}}} {{{2|}}}]]</span> {{#if: {{{blank|}}} | [No text] | {{{{{1|}}} {{{2|}}}.{{{3|}}}}} }}
</div>
因此,当您输入{{paget|page:cod.icon. 393 I|100r|jpg}}
时,它会遍历Page:Cod.icon. 393 I 100r.jpg
的内容,并用一个指向在新选项卡中打开的页面的链接来标记它。非常简单。
聚合页面通常是在所有内容存在之前构建的,在这种情况下,模板会生成一个红线批注来代替页面内容。我想更改这种行为,使其在不存在页面时不显示任何内容。
有三种主要的解决方案,{{#ifexist}}
函数、{{#dpl}}
函数和{{#ifeq}}
函数将输出与redlink url进行比较。由于各种原因,所有这些都不可行,但主要是因为它们会减慢页面加载速度(有时我们会转换数千个一段页面)。
所以我转向CSS解决方案,并在Mediawiki:Common.css
:中创建了这个规则
.hidden-redlink > a.new,
.hidden-redlink a.new {
display: none;
visibility: hidden;
}
然后我将类添加到模板中,即<div class="plainlinks hidden-redlink"></div>
。这没有产生任何结果。我还尝试在<span class="hidden-redlink"></span>
中只封装transcluded部分,并将类添加到聚合表本身,但这些操作也未能产生任何结果。直接将其封装在<span style="display:none;"></span>
中会隐藏链接,但显然也会隐藏被屏蔽的内容。
我已经尽我所能重新调整了CSS规则和类分配,但结果是空的。我缺了什么拼图吗?
MediaWiki:1.21.2
PHP:5:10-10ubuntu3.9(apache2handler)
MySQL:5.5.29-0ubuntu0.12.04.2
好吧,我尝试过做类似的事情,通过在class="hidden redlink"的div内执行{{help:不存在}}来转换未创建的帮助页面,从而获得一个redlink页面,下面的CSS可以隐藏红色链接:
.hidden-redlink a.new {
display:none !important;
}
老实说,我不太明白你为什么要使用这么长的代码来获得跨区,但我还是不知道你从哪个命名空间获得代码,所以我可能只是没有把软件使用到你所要求的复杂程度。使用{{namespace:pagename}}(显然是把namespace和pagename分别改为namespace和page name)而不是你当前的长代码,这可能会让事情变得不正常,这有什么问题吗?