我正在尝试将$ old从getOldText传递给带有全局变量的reEdit,但它无效。我无法从reEdit内部调用getOldText,因为在发生时,旧文本将被编辑覆盖。
$old = "INITIAL";
function reEdit() {
global $old;
//removed code creating article object to simplify
$new = $article->getRawText();
$article->doEdit( "$new <-new old -> $old"); //PROBLEM HERE, returns as INITIAL
return true;
}
function getOldText() {
global $old;
//removed code creating article object to simplify
$old = $article->getRawText();
return true;
}
$wgHooks['EditFormInitialText'][] = array('getOldText');
$wgHooks['ArticleSaveComplete'][] = array('reEdit');
问题在于指示的行 - 尽管是全局的,旧的$ old也没有传递给它。
$ wgHooks是MediaWiki代码,分别在文章开始编辑和保存时调用我的函数。对于那些熟悉mediawiki代码的人,我只是想在编辑执行之前获取文本。
答案 0 :(得分:0)
最初设置的$ old变量在哪里?我认为问题可能是范围界定,并且你不应该在函数之外的最初$ old之前使用'global'这个词。没有看到更多的代码,就没有办法确定。
答案 1 :(得分:0)
我知道这不是标准方式,但我们仍然可以尝试使用$ _GET来存储旧数据。这样我们就可以消除所有文件/类特定的范围问题。
$_GET['old'] = 'INITIAL';
function reEdit() {
//removed code creating article object to simplify
$new = $article->getRawText();
$article->doEdit( "$new ".$_GET['old']); //PROBLEM HERE, returns as INITIAL
return true;
}
function getOldText() {
//removed code creating article object to simplify
$_GET['old'] = $article->getRawText();
return true;
}
$wgHooks['EditFormInitialText'][] = array('getOldText');
$wgHooks['ArticleSaveComplete'][] = array('reEdit');
尝试以上并看到它有效,如果它有效,那么我们需要检查的范围问题。否则,您需要重新访问MediaWiki文档。
BTW,您的代码不需要第一行。
答案 2 :(得分:0)
您的全局变量未持久保存该值的原因是因为您的两个函数不是同时在同一HTTP请求中运行。在生成编辑表单时调用EditFormInitialText
,在某些情况下可能根本不运行。 1}}在稍后提交时被调用,当文章的新版本实际上已完成保存时。
您可以使用ArticleSaveComplete
挂钩代替ArticleSave
执行您想要执行的操作。