2013-05-20 81 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