当前位置

MediaWiki的页面中调用内部搜索结果

James Qi 在 2012年11月22日 - 13:47 提交

  我们用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的扩展程序来实现。

自由标签:

添加新评论

Plain text

  • 不允许使用HTML标签。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。