2014-03-01 26 views
0

我有一個模板,旨在將內容從另一個名稱空間中的頁面轉換爲主空間;它用於將大量頁面聚合到一個表中。其基本結構是這樣的:有選擇地隱藏MediaWiki中的紅色鏈接

Template:Paget

<div class="plainlinks"> 
<span style="font-weight:normal; font-size:85%;">&#91;[{{fullurl:{{{1|}}} {{{2|}}}.{{{3|}}}}} {{{2|}}}]&#93;</span>&nbsp;{{#if: {{{blank|}}} | [No text] | {{{{{1|}}} {{{2|}}}.{{{3|}}}}} }} 
</div> 

所以,當你進入{{paget|page:cod.icon. 393 I|100r|jpg}}它transcludes的Page:Cod.icon. 393 I 100r.jpg的內容,並且還帶有一個鏈接回,在新標籤頁中打開該頁面對其進行標註。很簡單。

聚合頁面通常是在所有內容都存在之前構建的,在這種情況下,模板將生成一個紅鏈接代替頁面內容。我想改變這種行爲,以便在沒有頁面存在時它不顯示任何內容。

有三個主要解決方案,{{#ifexist}}函數,{{#dpl}}函數和{{#ifeq}}函數將輸出與一個紅鏈接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>環繞它隱藏鏈接,但顯然也隱藏了transcluded內容。

我已經改變了CSS規則和類的任務,我可以想到的所有方式,但空出來。我錯過了一些難題嗎?

鏈接到MediaWiki:1.21.2
PHP:5.3.10-1ubuntu3.9(apache2handler)
MySQL的:5.5.29-0ubuntu0.12.04.2

+1

嗯,我可以說'.hidden-redlink a.new'匹配'.hidden-redlink> a.new'的所有內容,這使得'>'選擇器變得冗餘。 – BoltClock

回答

0

好吧,我試圖做類似的事情,得到一個通過做transcluding的自存的幫助頁面redlinked頁{{幫助:不存在}}帶class =「隱藏redlink」下面CSS一個div內部工作隱藏紅色鏈接:

.hidden-redlink a.new { 
    display:none !important; 
} 

要對你誠實,我不太明白你爲什麼使用這麼長的代碼來獲得你的transclus離子,但是我再也不認識到你從中獲得代碼的名稱空間,所以我可能只是不使用該軟件來達到你推動的複雜程度。使用{{namespace:pagename}}(顯然將名稱空間和頁面名稱分別改爲名稱空間和頁面名稱)而不是您當前使用的很長一段代碼可能會使事情失控?

+0

請參閱此文章:http://wiktenauer.com/wiki/Paulus_Hector_Mair。 向下滾動到「longsword」,你會看到每行有多個包含,最右邊的列中顯示空白的包含顯示爲紅色鏈接。 (索引和頁面命名空間由轉錄管理程序使用,該程序與運行Wikisource的轉換管理程序相同。) –

+0

在「longsword」下,我可以看到你有圖像包含和文章轉換到121行,此時有更多的圖像,但沒有更多的文章。但是,我看不到您在Chrome,IE或Firefox中描述的這些紅色鏈接。除了數字之外,這些框是空白的。你能告訴我你使用的是什麼瀏覽器嗎? – Imamadmad

+0

您是否滾動到最右欄的標題「JörgBreu的素描本(1545)」?我已經在IE 10,Firefox 24和Chrome 6中測試過了,它們都以同樣的方式呈現紅鏈接。 –