2012-05-29 142 views
1

我向我的mediawiki添加了一個新標籤(<news />)以列出上次修改後的頁面。
不幸的是,除非我修改標籤所在的頁面,否則不會更新列表。
我正在尋找一種方法來做到這一點,我想到了AJAX。但我沒有設法讓AJAX刷新我的列表。
有誰知道在我的Mediawiki上添加自動刷新功能的簡單方法?
這裏是我的擴展代碼: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; 
} 

回答

2

這可能是因爲鏈接到MediaWiki使用緩存的頁面。你可以做的是爲所需的功能製作一個SpecialPage。 AFAIK特殊頁面不被緩存(在irC#mediawiki上確認這一點)。 你也可能已經找到,如果你搜索一下Mediawiki.org存在的擴展有人做過類似的實現(否則我會很樂意爲你建一家:)

更新:擴展你可以使用Dynamic List(used in wikinews)news 。如果您搜索mediawiki.org,可能會有更多。

+0

你是對的Mediawiki使用緩存的網頁,這就是我的問題。我不知道特殊頁面並非如此。但我真的想在公共頁面中使用我的標籤«新聞»(在實際的主頁中)。你有一個想法,使其工作? – Nicolas

+0

看我的編輯。您也可以將主頁面重定向到其他頁面。 AFAIK有沒有一種可能的方式來禁用特定頁面的緩存除了追加?action = purge – nischayn22

+0

感謝2個鏈接,新聞非常有趣。我會看看他是怎麼做到的。 – Nicolas