我向我的mediawiki添加了一个新标签(<news />
),以列出最后修改的页面
不幸的是,除非我修改标签所在的页面,否则列表不会更新
我正在寻找一种方法,我想起了AJAX。但我没有设法让AJAX更新我的名单
有没有人知道在Mediawiki上添加自动刷新功能的简单方法?
这是我的扩展代码:
$wgHooks['ParserFirstCallInit'][] = 'replaceTags';
function replaceTags( Parser $parser ) {
$parser->setHook( 'news', 'newsRender' );
return true;
}
function newsRender( $input, array $args, Parser $parser, PPFrame $frame ) {
// Titre =News=
$output = $parser->parse( "=News=", $parser->mTitle, $parser->mOptions, false, false )->getText();
$nb = 5;
$querySQL = "SELECT page_namespace, page_title, page_id, page_latest, rev_timestamp
FROM page, revision
WHERE page.page_latest = revision.rev_id
AND page_namespace = 0
ORDER BY rev_timestamp
DESC LIMIT 0,$nb";
$dbr = wfGetDB( DB_SLAVE );
$res = $dbr->query( $querySQL );
$count = $dbr->numRows( $res );
if( $count > 0 ) {
$output .= "<ul>";
while( $row = $dbr->fetchObject( $res ) )
{
$pageTitle = $row->page_title;
$nicerPageTitle = str_replace("_", " ", $pageTitle);
$pageNamespace = $row->page_namespace;
$title = Title::makeTitleSafe( $pageNamespace, $pageTitle );
$url = $title->getFullURL();
$date = $row->rev_timestamp;
$date = wfTimestamp( TS_RFC2822, $date );
$output .= "<li><a href=\"$url\">$nicerPageTitle</a> $date</li>";
}
$output .= "</ul>";
} else {
$output .= "A l'ouest rien de nouveau !!!";
}
return $output;
}
答案 0 :(得分:3)
感谢nischayn22,我深入研究了缓存问题 我发现可以将其停用:
$parser->disableCache();
我试过了,它有效!!!
答案 1 :(得分:2)
这可能是因为MediaWiki对页面使用了Cache。你宁愿做的是为所需的功能制作一个SpecialPage。 AFAIK特殊页面未缓存(在irc #mediawiki上确认)。 如果您搜索Mediawiki.org上存在的扩展名,您可能已经找到了某人执行的类似实现。(否则我很乐意为您构建一个:)
更新:您可以使用Dynamic List(used in wikinews)和news的扩展程序。如果你搜索mediawiki.org,可能会有更多。