簡體   English   中英

在MediaWiki網站中安裝TabView擴展

[英]Installing TabView extension in a MediaWiki site

我目前正在嘗試在MediaWiki網站上安裝TabView擴展。 我從此頁面下載了php文件,並將其放在擴展文件夾中,如下所示:... / extensions / TabView / TabView.php

將以下行添加到LocalSettings.php文件:

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

不知何故,當我嘗試使用頁面上的標記時,出現此錯誤:

致命錯誤:在第107行的/var/www/html/camnang.vysajp.org/public/extensions/TabView/TabView.php中找不到類'F'

有沒有什么辦法解決這一問題?

您鏈接到的TabView擴展似乎取決於Wikia Nirvana框架 ,尤其是取決於WikiaSuperFactory類 (該類的“ F”是其虛擬子類)。 通過該框架,它從Wikia JSSnippets擴展實例化一個JSSnippets對象。

簡而言之,該擴展程序的JS端似乎利用了一堆特定於Wikia的代碼。 您可以嘗試將所有依賴項添加到Wiki,但是使用標准MediaWiki功能復制功能可能會更容易。


具體來說,查看JSSnippets類文檔(請參見上面的鏈接), addToStack()調用的作用是告訴瀏覽器異步加載兩個鏈接的JS文件,然后在文件加載后調用JS函數TabView.init()和命名的參數idselected (作為通用對象的屬性傳遞,例如JSON)。

使用標准MediaWiki ResourceLoader進行相同的操作應該不難。 首先,我們需要定義一個ResourceLoader模塊來加載所需的腳本(警告:未經測試的代碼!):

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

將其插入到擴展代碼頂部附近的函數定義之外的位置。 您還需要將mustache.js庫復制到TabView/js子目錄。

(我相信 ,即使使用ResourceLoader的范圍設定特性 ,也可以像這樣將兩個JS文件一起加載。當然,如果我們有幾個使用mustache.js庫的擴展,將其作為一個單獨的模塊可以更有效,更優雅。本身,但隨后它需要一個膠粘腳本,該腳本執行類似於window.Mustache = Mustache;

然后在hook函數中,我們需要告訴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文件說它“ [d]出現在skins / oasis / js / tab.js上”。 我找不到與維基的回購該名稱的任何文件,但一個皮/綠洲/ JS /片S 9 .js文件 ,你可能還需要復制到TabView/js子目錄,並添加到模塊定義一起小胡子。 JS。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM