我如何 return 来自 MediaWiki SearchAfterNoDirectMatch 挂钩的文本?
How do I return text from the MediaWiki SearchAfterNoDirectMatch hook?
我正在尝试编写一个 MediaWiki 搜索挂钩,它将列出文件系统中的本机文件,然后最终允许人们单击其中一个文件并查看其内容。
我的 extensions.json 包含这个:
"Hooks": {
"SearchAfterNoDirectMatch": "MediaWiki\Extension\NativeFileList\Hooks::onSearchAfterNoDirectMatch"
},
我的 Hooks::onSearchAfterNoDirectMatch 文件如下所示:
namespace MediaWiki\Extension\NativeFileList;
class Hooks {
/**
* @see https://www.mediawiki.org/wiki/Manual:Hooks/SearchAfterNoDirectMatch
* @called from https://gerrit.wikimedia.org/g/mediawiki/core/+/master/includes/search/SearchNearMatcher.php
* @param $searchterm
* @param $title - array of titles
* Returns true if it found something, false is otherwise
*/
public static function onSearchAfterNoDirectMatch( $searchterm, &$title ) {
$title=Title::newFromText( "test", "bar");
return false;
}
}
我的问题是 return 没有文本。嗯,比那更糟。使用上面的代码,我得到了一个异常(但我不知道如何调试它,因为我看不到异常)。如果我把行设置 $title
拿出来,它就是 returns。如果我将行更改为 $title=undefined();
我会收到另一个错误。如果我设置 $title="foo";
我没有错误,但没有 foo.
那么我如何 return 一次搜索命中,或者更好的是一组搜索命中?
None 的现有搜索插件使用现代搜索 Hook api,它记录在这些位置:
该挂钩不能 return 文本,您只需更改标题即可从挂钩生成匹配项。 $title 必须是标题 object,如果您在上面发布的代码正是您正在使用的代码,您的异常是由于第二个参数不是名称空间常量之一,例如 NS_MAIN
SearchAfterNoDirectMatch
用于return一个near-match的标题,而不是补充搜索结果。要补充搜索结果,请使用 onSpecialSearchResultsAppend
。下面的代码在搜索结果中添加了三行:
class Hooks {
/**
* @see https://www.mediawiki.org/wiki/Manual:Hooks/SearchAfterNoDirectMatch
* @called from https://gerrit.wikimedia.org/g/mediawiki/core/+/master/includes/search/SearchNearMatcher.php
* @param $searchterm
* @param $title - array of titles
*/
public static function onSpecialSearchResultsAppend( $that, $out, $term ) {
$out->addHTML("<h3>Extra Search Results:</h3>");
$out->addHTML("<ul>");
$out->addHTML("<li>Extra Result #1</li>");
$out->addHTML("<li>Extra Result #2</li>");
$out->addHTML("<li>Extra Result #3</li>");
$out->addHTML("</ul>");
}
}
}
这应该足以让大多数人继续前进。
我正在尝试编写一个 MediaWiki 搜索挂钩,它将列出文件系统中的本机文件,然后最终允许人们单击其中一个文件并查看其内容。
我的 extensions.json 包含这个:
"Hooks": {
"SearchAfterNoDirectMatch": "MediaWiki\Extension\NativeFileList\Hooks::onSearchAfterNoDirectMatch"
},
我的 Hooks::onSearchAfterNoDirectMatch 文件如下所示:
namespace MediaWiki\Extension\NativeFileList;
class Hooks {
/**
* @see https://www.mediawiki.org/wiki/Manual:Hooks/SearchAfterNoDirectMatch
* @called from https://gerrit.wikimedia.org/g/mediawiki/core/+/master/includes/search/SearchNearMatcher.php
* @param $searchterm
* @param $title - array of titles
* Returns true if it found something, false is otherwise
*/
public static function onSearchAfterNoDirectMatch( $searchterm, &$title ) {
$title=Title::newFromText( "test", "bar");
return false;
}
}
我的问题是 return 没有文本。嗯,比那更糟。使用上面的代码,我得到了一个异常(但我不知道如何调试它,因为我看不到异常)。如果我把行设置 $title
拿出来,它就是 returns。如果我将行更改为 $title=undefined();
我会收到另一个错误。如果我设置 $title="foo";
我没有错误,但没有 foo.
那么我如何 return 一次搜索命中,或者更好的是一组搜索命中?
None 的现有搜索插件使用现代搜索 Hook api,它记录在这些位置:
该挂钩不能 return 文本,您只需更改标题即可从挂钩生成匹配项。 $title 必须是标题 object,如果您在上面发布的代码正是您正在使用的代码,您的异常是由于第二个参数不是名称空间常量之一,例如 NS_MAIN
SearchAfterNoDirectMatch
用于return一个near-match的标题,而不是补充搜索结果。要补充搜索结果,请使用 onSpecialSearchResultsAppend
。下面的代码在搜索结果中添加了三行:
class Hooks {
/**
* @see https://www.mediawiki.org/wiki/Manual:Hooks/SearchAfterNoDirectMatch
* @called from https://gerrit.wikimedia.org/g/mediawiki/core/+/master/includes/search/SearchNearMatcher.php
* @param $searchterm
* @param $title - array of titles
*/
public static function onSpecialSearchResultsAppend( $that, $out, $term ) {
$out->addHTML("<h3>Extra Search Results:</h3>");
$out->addHTML("<ul>");
$out->addHTML("<li>Extra Result #1</li>");
$out->addHTML("<li>Extra Result #2</li>");
$out->addHTML("<li>Extra Result #3</li>");
$out->addHTML("</ul>");
}
}
}
这应该足以让大多数人继续前进。