Wiki - 来自外部源的表内容

时间:2013-09-05 06:32:19

标签: html mediawiki wiki

是否可以拥有一个带有两个表的维基页面,反映来自两个不同第三方站点的数据?

如果是这样,如何完成它?页面模板会对此有所帮助吗?

2 个答案:

答案 0 :(得分:2)

简短的回答是否定的,没有简单的内置方式将外部内容拉入MediaWiki网站。允许第三方注入任意内容将是巨大的安全风险。

很长的答案是任何可能的扩展,无论是现有的扩展还是您自己编写的扩展。 MediaWiki网站有一个完整类别的“Remote content extensions”列表,它们以某种形式执行此类操作,External Data看起来特别有用。您将需要管理员权限来安装其中任何一个,并且您需要信任扩展代码和您提取的数据。

答案 1 :(得分:0)

我已经准确地写了你描述的内容。可能对你有帮助。

# Define a setup function
$wgHooks['ParserFirstCallInit'][] = 'efStackOverflow_Setup';
# Add a hook to initialise the magic word
$wgHooks['LanguageGetMagic'][]       = 'efStackOverflow_Magic';

function efStackOverflow_Setup( &$parser ) {
        # Set a function hook associating the "example" magic word with our function
 $parser->setFunctionHook( 'stag', 'efStackOverflow_Render' );
        return true;
}

function efStackOverflow_Magic( &$magicWords, $langCode ) {
        # Add the magic word
        # The first array element is whether to be case sensitive, in this case (0) it is not case sensitive, 1 would be sensitive
        # All remaining elements are synonyms for our parser function
        $magicWords['stag'] = array(1, 'stag');
        # unless we return true, other parser functions extensions won't get loaded.
        return true;
}

function efStackOverflow_Render( $parser, $param1 = '', $param2 = '' ) {
  // there was filtering
  $modif = 0;

  $cache_file_path = "cache/".$param1."_".$param2;

  if (file_exists($cache_file_path))
  $modif = time() - @filemtime ($cache_file_path);

  if (file_exists($cache_file_path) and $modif < 60*60*24) {

    return file_get_contents($cache_file_path);

  }

  $page = file_get_contents("http://www.google.com/rss/".$param1);

  $xml = new SimpleXMLElement($page);

  foreach ($xml as $key => $value) {
// do some
  }

  if (!empty($output))
  file_put_contents($cache_file_path, $output);

  return $output;

}

Mediawiki版本是1.16。