从自定义MediaWiki挂钩返回结果

时间:2014-03-13 16:57:11

标签: php hook mediawiki

我正在攻击现有的MediaWiki扩展程序ProcessCite,它会为Cite extension添加自定义挂钩。自从迁移到PHP 5.4和MW 1.22(从PHP 5.3和MW 1.19.2),扩展似乎无法正常工作。问题是自定义钩子没有返回它应该做的数据。

以下是代码的相关部分:

ProcessCite.php

# Declare the hook:
$wgHooks['CiteBeforeStackEntry'][] = 'wfProcessCite';

# the function itself
function wfProcessCite($str, $argv){

# process $argv and $str to create a new version of $str
# $argv remains unchanged, $str is set to new value
  ...
  $str = "new string";

  return true;
}

在Cite_body.php中

function stack( $str, $key = null, $group, $follow, $call ) {
  # add the call to the CiteBeforeStackEntry hook
  wfRunHooks( 'CiteBeforeStackEntry', array( &$str, &$call ) );

我在wfProcessCite的开头和结尾添加了调试语句,表明$str正在被修改;但是,wfRunHooks之前和之后的调试语句对$str没有任何更改。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

在Mediawiki邮件列表中得到了Andru Vallance的答案:

  

在函数参数前面添加一个&符号会导致它通过引用传递给它。   这意味着您将直接操作函数内的原始变量,而不是副本。

function wfProcessCite( &$str, $argv ){
    $str = ‘new value’; 
    return true;