2013-02-13 19 views
0

我的mediawiki版本是1.16.5。我有一個函數從數據庫中選擇一個隨機引用,並將其顯示在wiki頁面上。斜體字呈現,當我使用HTML,但是,我希望能夠用wikitext的,特別是外部鏈接的格式,即啓用mediawiki功能來呈現wiki文本

[http://mediawiki.org MediaWiki] 

目前,如果使用類似上述內容,不渲染和顯示字面上。這裏有一些需要參考:http://www.mediawiki.org/wiki/Manual:Tag_extensions#How_do_I_render_wikitext_in_my_extension.3F但我不知道如何實現這一點。

下面是代碼:

function wfGetQuote() { 
    $randstr = wfRandom(); 
    $row = selectRandomQuoteFromDB($randstr); 

    if(!$row) 
     $row = selectRandomQuoteFromDB("0"); 

    if($row) { 
     list($quote, $attribution) = explode("\n", $row->quote_text); 
     return '<div id="trrandomquote"><div id="trquote">'. $quote .'</div> <span>'. $attribution .'</span></div>'; 
    } 
    else 
     return 'Error: No quote found'; 
} 

function selectRandomQuoteFromDB($randstr) { 
    global $wgUser, $site; 

    $lang = $wgUser->getOption('language'); 
    if($site == 'wiki') 
     $lang = 'en'; 

    $dbr = wfGetDB(DB_SLAVE); 
    $use_index = $dbr->useIndexClause('quote_random'); 
    $quote = $dbr->tableName('quote'); 

    $sql = "SELECT quote_text 
     FROM $quote $use_index 
     WHERE quote_random >= $randstr 
     AND quote_lang = '$lang'"; 

    $sql = $dbr->limitResult($sql, 1, 0); 
    $fname = 'RandomQuote::selectRandomQuoteFromDB'; 
    $res = $dbr->query($sql, $fname); 
    return $dbr->fetchObject($res); 
} 
+0

你沒有開發標籤擴展,是嗎? – Bergi 2013-02-13 11:45:04

+0

不,我只是想要現有的維基標記在引號文本中工作。 – greektranslator 2013-02-13 12:59:33

回答

0

通常我使用$wgOut->addWikiText($msg);功能。

我會修改代碼以:

function wfGetQuote() { 
    global $wgOut; // Added line 

    $randstr = wfRandom(); 
    $row = selectRandomQuoteFromDB($randstr); 

    if(!$row) 
     $row = selectRandomQuoteFromDB("0"); 

    if($row) { 
     list($quote, $attribution) = explode("\n", $row->quote_text); 
     $wgOut->addWikiText('<div id="trrandomquote"><div id="trquote">'. $quote .'</div> <span>'. $attribution .'</span></div>'); 
    } 
    else 
     return 'Error: No quote found'; 
} 

我沒有測試它,但它可能做你要找的工作。

+0

謝謝,我試過了,但輸出沒有呈現。比如我: '

Quote text
[http://www.somesite.com/index.php?topic=49027.0作者簡介],片段761
' 這是位修改引號的文本: 'foreach($ lines as $ line){ $ rand = wfRandom(); $ line = preg_replace(「#
''#」,「\ n」,$ line); $ line = preg_replace(「#」'#「,'',$ line); $ line = preg_replace(「#
#」,「\ n」,$ line); $ line = preg_replace(「##」,'',$ line); $ line = $ dbr-> addQuotes($ line);' – greektranslator 2013-02-14 08:45:34

+0

測試mediawiki文章中的輸出源代碼確實解析了wikitext,所以這證實在函數中缺少某些東西,而不是粘貼在上面的代碼中,報價文字。 – greektranslator 2013-02-14 09:21:37

+0

您可以嘗試混合'$ wgOut'對象的'addWikiText'和'addHTMLText'函數。將所有HTML標記放在'addHTMLText'函數中,並將所有wiki文本放在'addWikiText'中。這應該做的工作... – 2013-02-14 18:38:37