我们用MediaWiki搭建的网站中,一些页面需要用到内部搜索结果,我们以前的办法是采用Google Search API,嵌入JavaScript代码后就可以显示Google已经收录的相关页面,这个办法简单易行,缺点是没有被收录的页面无法出现,已经展示的JS内容不会被搜索引擎发现内容。
十八大前后这一阵子Google搜索一直不正常,也影响到我们网站上含有Google搜索代码的页面,间歇性会出现打不开或者打开极慢的情况,影响用户正常访问我们的页面。这个问题有可能长期存在,所以必须设法解决了,否则只好把相关页面删除。
昨天试了一些办法,后来用在页面中嵌入PHP程序显示Wiki自己的内部搜索结果的办法算是基本上可以解决,步骤如下:
- 对相关MediaWiki网站打开Include_PHP扩展程序,以便支持在页面中嵌入PHP程序;
- 在scripting目录下创建文件search_result.php,在其中调用MediaWiki的搜索函数,程序附后;
- 在相关页面或者模板中嵌入代码<include_PHP file="search_result" />,调用上面程序;
- 进行需要的模板更新、runJobs.php以及缓存更新等操作。
一个热门词搜索的页面修改后的例子:http://xizang.mingluji.com/%E9%A3%9F%E5%93%81
search_result.php程序如下:
<?php
$title = str_replace("/","",strrchr(urldecode($_SERVER["REQUEST_URI"]),"/"));
$par=$title;
global $wgRequest, $wgUser;
// Strip underscores from title parameter; most of the time we'll want
// text form here. But don't strip underscores from actual text params!
$titleParam = str_replace( '_', ' ', $par );
// Fetch the search term
$search = str_replace( "\n", " ", $wgRequest->getText( 'search', $titleParam ) );
$searchPage = new SpecialSearch( $wgRequest, $wgUser );
$searchPage->showResults( $search );
需要说明的是,调用上面的的程序后,还无法控制整个页面的显示顺序,内部搜索结果总是在页面上方,也许以后可以找到解决的办法,现在先用这样的。
2015年初补充:在把MediaWiki从1.16.0升级到1.23.5后,上面的办法就失效了,也没有找到很简单的修改办法,就暂时去掉了这样的页面。以后如果需要的话,可以考虑自己编写MediaWiki的扩展程序来实现。
评论