我正在学习如何在mediawiki中使用hooks。我也是PHP的新手。 可以通过将下一行放入LocalSettings.php:
来添加常规钩子处理程序$wgHooks['event'][] = 'function';
假设我在myfunction
文件中写了my.php
。如何从LocalSettings.php
编辑。我在my.php文件中写了一些函数。如何参考这个功能?
我应该告诉mediawiki在哪里找到这个函数。我不知道该怎么做。
我应该写'$wgHooks['event'][] = 'my.php:function'
。或者我应该include
my.php文件到LocalSetting然后只写'$wgHooks['event'][] = 'function'
答案 0 :(得分:3)
正如docs所说,您需要将带有函数名称的字符串(或字符串数组等)推送到钩子数组。
AFAIK,当触发钩子时,将使用call_user_func()
调用它们。因此,它将取决于my.php文件中的函数声明。使用myfunction
时,它应该是
$wgHooks['event'][] = 'myfunction';
答案 1 :(得分:2)
从我从mediawiki文档中读到的内容,您需要创建一个扩展,并在您的扩展中安装您的钩子。在my.php中你会写:
// $wgHooks is a global variable
$wgHooks['event'][] = 'function';
希望我理解正确 扩展文档 http://www.mediawiki.org/wiki/Manual:Extensions
答案 2 :(得分:0)
我不确定我完全理解你想要什么,但是如果你想调用用户定义的函数,你可以使用call_user_func作为参数作为函数的名称。您必须include该文件,以便该功能可用。
call_user_func('myfunction ', array());
答案 3 :(得分:0)
您在PHP中通过callbacks引用函数。回调就是其中之一:
'myFunc'
array('MyClass', 'myFunc')
array($myObj, 'myFunc')
function($x, $y) { /* PHP code */ }
(这只是PHP 5.3+,但MediaWiki的最新版本也是如此)通过call_user_func($callback, $arg1, $arg2)
调用这些回调将分别等同于以下内容:
myFunc($arg1, $arg2);
MyClass::myFunc($arg1, $arg2);
$myObj->myFunc($arg1, $arg2);
$x
和$y
替换为$arg1
和$arg2
如果此代码失败(例如,您使用第一个版本,并且未加载函数myFunc
),则回调也将失败。你可以在MediaWiki中使用autoloading和第二种形式,通常是通过$wgAutoloadClasses完成的:
// in MyExtension.php
$wgHooks['event'][] = array('MyExtension', 'myEventHandler');
$wgAutoloadClasses['MyExtension'] = dirname(__FILE__) . 'MyExtension.body.php';
// in MyExtension.body.php
class MyExtension {
public function myEventHandler($p1, $p2) {
// do stuff
}
}
这样,您可以从MyExtension.php
加载LocalSettings.php
(这是一个仅包含配置设置的小文件),而MyExtension.body.php
(包含所有代码)只会加载到那些实际使用您的扩展程序的请求。