|
Mediawiki 是一个应用于包括WIKIMEDIA在内的许多网站的高效的PHP WIKI程序,它的可扩展性与安全性,以及其极其简易的应用性使得用户很轻松的为它编写插件程序。
假如你想把自己的生活经历在WIKI里发表,WIKI 的程序文件经常会发生变化,并且WIKI一定要反映其内部文件的情况。你可以编写一个插件来解决这个现象。这些插件的目录位于
extensions/ subdirectory等目录下,有许多插件可以下载。如果你具备对PHP基本的了解,你就可以写出自己貌似与WIKI程序无缝对接的插件来。
下面的内容将会显示通过WIKI页面所提交的内容,这个文件一定要在服务器端具有可读的属性。
以下是引用片段:
// Add the hook function call to an array defined earlier in the wiki code execution.
$wgExtensionFunctions[] = "wfFile";
// This is the hook function. It adds the tag to the wiki parser and tells it what callback function to use.
function wfFile() {
global $wgParser;
# register the extension with the WikiText parser
$wgParser->setHook( "file", "renderFile" );
}
# The callback function for converting the input text to HTML output
function renderFile( $input ) {
$file = NULL;
if (isset($input))
{
switch($input)
{
case "/tmp/status";
$file = "/tmp/status";
break;
case "/var/lib/foo":
$file = "/var/lib/foo";
break;
}
}
if (file_exists($file))
{
$data = file($file);
$data = implode($data, "");
} else {
$data = "Invalid version";
}
$return= "
" . $data . "
";
return $return;
}
?>
如果你没有把输入的内容进行过滤的话,一定要当心了。因为这个插件可能会具有危险性,在这段代码里,我们明确检测到如果$input 这个变量是一个或两个文件时,如:/var/lib/foo or /tmp/status,如果两者都不是,这个$file 变量就不会被设置并且仍然为NULL。如果提交的文件名是这两个文件中的任意一个,它就会被检索到然后返回MEDIAWIKI显示出来。
将以下内容增加到LocalSettings.php 文件中,用来包含扩展文件。(假设这个文件起名 PLUGIN——FILE.PHP)
include("./extensions/plugin_file.php");
最后,要想在MEDIAWIKI里应用这个插件,你需要用以下代码创建或编辑一个页面:
/tmp/status
我们通过$wgParser->setHook的调用来使用插件程序,我们用相关的功能来定义这个文件
如你能看到的,这个例子十分的简单,能够为一个网站添加自己编写的代码,这将给你扩展自己的WIKI带来无限的可能。
|
|