修改MediaWiki搜索表单



是否有一种方法来修改MediaWiki搜索表单在页面标题,而不是通过编辑Vector.php ?

基本上,我想更改/扩展HTML表单的标记,并为Ajax调用添加一个JavaScript侦听器。

遗憾的是,我似乎找不到合适的钩子。

如果要更改HTML,这是不容易做到的。但是要添加JavaScript侦听器,通常不需要直接在想要侦听事件的输入中添加内容。

你可以,例如,使用jQuery为搜索输入添加一个监听器。为此,您可以创建一个新的扩展(阅读本手册快速开始)。在扩展中,您创建了一个新的资源模块:

{
    "@comment": "Other configuration options may follow here"
    "ResourceFileModulePaths": {
        "localBasePath": "",
        "remoteSkinPath": "ExampleExt"
    },
    "ResourceModules": {
        "ext.ExampleExt.js": {
            "scripts": [
                "resources/ext.ExampleExt.js/script.js"
            ]
        }
    },
    "@comment": "Other configuration options may follow here"
}
现在,您可以添加您在模块中定义的脚本文件:
( function ( $ ) {
    $( '#searchInput' ).on( 'change', function () {
        // do whatever you want when the input
        // value changed
    }
}( jQuery ) );

函数中的代码(在on()函数的第二个形参中)将在搜索输入的值发生变化时运行。

现在,您只需要在MediaWiki输出为页面时加载模块。最简单的方法是使用BeforePageDisplay钩子:

注册钩子处理器:

{
    "@comment": "Other configuration options may follow here"
    "Hooks": {
        "BeforePageDisplay": [
            "ExampleExtHooks::onBeforePageDisplay"
        ],
    },
    "@comment": "Other configuration options may follow here"
}

处理钩子(在ExampleExtHooks类中,需要创建并添加到autolload类中):

public static function onBeforePageDisplay( OutputPage &$output, Skin &$skin ) {
    $output->addModules( array(
        'ext.ExampleExt.js',
    ) );
    return true;
}

首先,我添加了一个钩子:

$wgHooks['BeforePageDisplay'][] = 'MyNamespaceHooks::onBeforePageDisplay';

钩子很简单:

public static function onBeforePageDisplay( OutputPage &$out, Skin &$skin ) {
    $skin->template = 'MyNamespaceTemplate';
}

最后,Template类覆盖renderNavigation()方法,该方法呈现搜索表单:

<?php
namespace XtxSearch;
class Template extends VectorTemplate {
    protected function renderNavigation( $elements ) {
        ...
    }
}

相关内容

  • 没有找到相关文章

最新更新