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