2013-08-06 162 views
2

在MediaWiki皮膚定義中,獲得擴展的BaseTemplate有幾個用於創建鏈接到wiki中其他頁面的鏈接的屬性,但是我有一種情況,我需要皮膚目錄的路徑來拉取用於創建UI。默認情況下,默認情況下,這只是/skins/mySkin/images/foo.png,但如果有人更改了$wgStylePath變量,或者重命名了皮膚,那將是一個問題。是否有一個現有的變量具有構建該URL的變量,隱藏在BaseTemplate方法中的某處?如何在Mediawiki中獲取當前皮膚的文件路徑?

回答

1

是的,SkinTemplate類包含在執行模板之前設置模板變量的代碼,可通過'stylepath'模板變量提供對$wgStylePath的訪問。

當您繼承SkinTemplate以定義皮膚的主類時,您還需要覆蓋$stylename成員變量,該成員變量指定您的皮膚自己的樣式表和圖像所在的子目錄。 (這個通常是與小寫的皮膚名稱相同,但它不具有;使用來自同一目錄的圖像有兩個相關的皮膚是完全正確的)。也作爲模板變量提供,令人驚訝地命名爲'stylename'。因此,在您的模板中指定圖像路徑的一種方法可能類似於:

<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/images/foo.png 

另一種方式,例如,皮膚,皮膚,將使用Skin類(這是SkinTemplate的超類;由於歷史原因,這是一種凌亂和糾結的類型,但基本上你可以幾乎把它們當作一個類拆分成兩個文件)的getSkinStylePath()方法。

要使用它,你的文件作爲參數的名稱傳遞和方法自動會預先$wgStylePath$stylename它(並附加$wgStyleVersion作爲查詢字符串)。請注意,這是不是一個模板方法,所以你要逃跑,並打印自己返回的URL:

<?php echo htmlspecialchars($this->getSkin()->getSkinStylePath('images/foo.png')) ?> 

還有一個getCommonStylePath()方法,做同樣的事情,不同的是它採用了串"common"代替$stylename

相關問題