2013-05-20 79 views
1

我正在嘗試在我的MediaWiki站點上安裝TabView擴展。我從this page下載的PHP文件,並把它的擴展名的文件夾中遵循... /擴展/ TabView的/ TabView.php在MediaWiki站點中安裝TabView擴展

添加了以下行的LocalSettings.php文件:

require_once("$IP/extensions/TabView/TabView.php"); 

不知何故,當我試圖使用標籤頁面中,我得到這個錯誤:

Fatal error: Class 'F' not found in /var/www/html/camnang.vysajp.org/public/extensions/TabView/TabView.php on line 107

反正是有解決這一問題?

回答

1

您鏈接的TabView extension似乎取決於Wikia Nirvana framework,特別是在WikiaSuperFactory class(其中類「F」是虛擬子類)。通過該框架,它從Wikia JSSnippets extension實例化了一個JSSnippets對象。

簡而言之,該擴展的JS方面似乎利用了一大堆Wikia特定的代碼。您可以嘗試將所有依賴關係添加到您的wiki中,但使用標準MediaWiki功能複製功能可能更容易。


具體來說,看着JSSnippets類文檔(見上面的鏈接),什麼addToStack()通話所做的就是告訴瀏覽器異步加載了兩個鏈接的JS文件,然後,一旦文件加載,調用JS函數TabView.init(),命名參數爲idselected(作爲通用對象的屬性傳遞,就像在JSON中一樣)。

與標準MediaWiki ResourceLoader做同樣的事情不應該太難。首先,我們需要定義一個加載我們需要的腳本個資源模塊(警告:未經測試的代碼):

$wgResourceModules['ext.TabView'] = array(
    'scripts' => array('js/mustache.js', 'js/TabView.js'), 
    'localBasePath' => __DIR__, 
    'remoteExtPath' => 'TabView', 
); 

插入這附近的某處擴展代碼的頂部,函數定義之外。您還需要將mustache.js library複製到TabView/js子目錄。

(我相信加載兩個js文件在一起,就像這應該工作,即使ResourceLoader's scoping peculiarities。當然,如果我們有這樣的使用mustache.js庫幾個擴展,這將是更有效和更優雅,使之一個單獨的模塊本身,但它然後需要一個膠水腳本,做一些像window.Mustache = Mustache;。)

在鉤子函數,然後我們需要告訴MediaWiki加載此模塊,並調用TabView.init()函數,如下所示:

$opts = array('id' => "flytabs_$id", 'selected' => $optionsIndex); 
$opts = json_encode($opts); 
$js = "mw.loader.using('ext.TabView', function() { TabView.init($opts) });"; 
$out .= "<script type='text/javascript'>$js</script>"; 

Ps。 TabView.js file表示它「[d]依靠皮膚/綠洲/ js/tab.js」。我在Wikia的回購庫中找不到任何具有該名稱的文件,但 a skins/oasis/js/tabs.js其中可能也需要複製到TabView/js子目錄中並添加到mustache.js旁邊的模塊定義中。

+0

對於遲到的回覆,我非常抱歉,非常感謝您提供非常詳細的答案。 我只是想確保下面的代碼段都應該被添加到擴展/ TabView的/ TabView.php,是否正確? ('js/mustache.js','js/tabs.js','js/TabView.js'), ' localBasePath'=> __DIR__, 'remoteExtPath'=>'TabView', );' – Arcius

+0

和 '$ opts = array('id'=>「flytabs_ $ id」,'selected'=> $ optionsIndex); $ OPTS = json_encode($ OPTS); $ JS = 「mw.loader.using( 'ext.TabView',函數(){TabView.init($ OPTS)});」; $出= 「<腳本類型= '文本/ JavaScript的'> $ js的」;' – Arcius

+0

我還添加mustache.js,tabs.js和TabView.js到extenstions/TabView的/ JS;並在ResourceLoader模塊中添加了'js/tabs.js',但它仍然不起作用。 – Arcius