修改MediaWiki搜索表单

时间:2015-09-08 05:40:06

标签: mediawiki mediawiki-extensions mediawiki-templates

除了编辑SELECT * FROM location WHERE ( latitude BETWEEN (latValue? - 0.009044) AND (LatValue?+0.009044)) AND (longtitude BETWEEN (longValue? - 0.0089831) AND (longValue?+0.0089831));之外,有没有办法在页眉中修改MediaWiki搜索表单?

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

不幸的是,我似乎无法找到合适的钩子。

2 个答案:

答案 0 :(得分:2)

如果您想要更改HTML,那就不容易实现。但是要添加JavaScript监听器,您通常不需要直接向要监听事件的输入添加内容。

例如,您可以使用jQuery向搜索输入添加侦听器。为此,您可以创建一个新的扩展(阅读this manual以便快速启动)。在您的扩展中,您将创建一个新的资源模块:

{
    "@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 hook

注册钩子处理程序:

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

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

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

答案 1 :(得分:0)

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

$wgHooks['BeforePageDisplay'][] = 'MyNamespace\Hooks::onBeforePageDisplay';

钩子非常简单:

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

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

<?php

namespace XtxSearch;

class Template extends \VectorTemplate {

    protected function renderNavigation( $elements ) {
        ...
    }

}