繁体   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