首页 > 解决方案 > 如何从 MediaWiki SearchAfterNoDirectMatch 挂钩返回文本?

问题描述

我正在尝试编写一个 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;
    }

}

我的问题是没有返回文本。嗯,比那更糟。使用上面的代码,我得到一个异常(但我不知道如何调试它,因为我看不到异常)。如果我把线$title放出来,它就会返回。如果我将行更改为$title=undefined();我得到另一个错误。如果我设置$title="foo";我没有错误,但没有 foo.

那么我如何返回一个搜索命中,或者更好的是,一组搜索命中?

现有的搜索插件都没有使用现代搜索 Hook api,该 API 记录在以下位置:

标签: hookmediawikimediawiki-extensions

解决方案


该挂钩无法返回文本,您只需更改标题即可从挂钩生成匹配项。$title 必须是 Title 对象,如果您在上面发布的代码是您正在使用的确切代码,那么您的异常是由于第二个参数不是命名空间常量之一,例如NS_MAIN


推荐阅读