wangsisi 发表于 2010-12-31 15:31:55

用自定义插件扩展Mediawiki



引:Mediawiki 是一个应用于包括WIKIMEDIA在内的许多网站的高效的PHP WIKI程序,它的可扩展性与安全性,以及其极其简易的应用性使得用户很轻松的为它编写插件程序。
        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带来无限的可能。

章义福 发表于 2011-9-8 07:00:37

好帖,确实好帖!











static/image/common/sigline.gif
http://img02.taobaocdn.com/imgextra/i2/378862561/T2KhpUXXlXXXXXXXXX_!!378862561.jpg
页: [1]
查看完整版本: 用自定义插件扩展Mediawiki

BlueHost美国主机优惠码