在MediaWiki站点中安装TabView扩展

时间:2013-05-20 06:44:05

标签: php mediawiki

我目前正在尝试在MediaWiki网站上安装TabView扩展程序。我从this page下载了php文件并将其放在extensions文件夹中,如下所示:/ 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”类

有没有解决这个问题?

1 个答案:

答案 0 :(得分:1)

您链接的TabView extension似乎取决于Wikia Nirvana framework,特别是WikiaSuperFactory class(类" F"是虚拟子类) 。通过该框架,它从JSSnippets实例化Wikia JSSnippets extension对象。

简而言之,该扩展的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 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>";

聚苯乙烯。 TabView.js file表示它&#34; [d]依赖于皮肤/ oasis / js / tab.js&#34;。我无法在Wikia的回购中找到任何具有该名称的文件,但 一个skins/oasis/js/tabs.js,您可能也需要复制进入TabView/js子目录并添加到mustache.js旁边的模块定义。