修改MediaWiki搜索表单

修改MediaWiki搜索表单,mediawiki,mediawiki-extensions,mediawiki-templates,Mediawiki,Mediawiki Extensions,Mediawiki Templates,除了编辑Vector.php,是否有其他方法可以修改页面标题中的MediaWiki搜索表单 基本上,我希望更改/扩展HTML表单的标记,并为Ajax调用添加一个JavaScript侦听器 不幸的是,我似乎找不到合适的钩子。如果您想更改HTML,这不太可能。但是,要添加JavaScript侦听器,通常不需要在要侦听事件的输入中直接添加内容 例如,您可以使用jQuery向搜索输入添加侦听器。为此,您可以创建一个新的扩展(请阅读快速入门)。在扩展中,创建一个新的资源模块: { "@commen

除了编辑
Vector.php
,是否有其他方法可以修改页面标题中的MediaWiki搜索表单

基本上,我希望更改/扩展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输出到达页面时加载模块。最简单的方法是使用:

注册钩子处理程序:

{
    "@comment": "Other configuration options may follow here"
    "Hooks": {
        "BeforePageDisplay": [
            "ExampleExtHooks::onBeforePageDisplay"
        ],
    },
    "@comment": "Other configuration options may follow here"
}
处理钩子(在
ExampleExtHooks
类中,需要创建并添加到自动加载类中):

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

$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 ) {
        ...
    }

}

谢谢你为我指明了正确的方向。下面是我的答案。如果用户使用MonoBook,我将不得不研究MonoBook。但是,我也希望有一种方法可以覆盖搜索表单的HTML输出。我仍然不知道,为什么要更改HTML输出:)我想使用一个自定义的搜索扩展,它可以收集来自各种来源(wiki、在线商店、其他网站)的搜索结果。这就是为什么我需要完全控制HTML。
<?php

namespace XtxSearch;

class Template extends \VectorTemplate {

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

}