【问题标题】:Enable a mediawiki function to render wikitext启用 mediawiki 功能以呈现 wikitext
【发布时间】:2013-01-28 18:22:17
【问题描述】:

我的 mediawiki 版本是 1.16.5。我有一个从数据库中选择随机引用并将其显示在 wiki 页面上的函数。使用 html 时会呈现斜体和粗体,但是,我希望能够使用 wikitext,特别是外部链接格式,即

[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 );
}

【问题讨论】:

  • 你不是在开发标签扩展,是吗?
  • 不,我只是想让现有的 wiki 标记在引号文本中工作。

标签: mediawiki


【解决方案1】:

通常我使用$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';
}

我尚未对其进行测试,但它可能会完成您正在寻找的工作。

【讨论】:

  • 谢谢,我试过了,但没有渲染输出。例如我得到:&lt;div id="trrandomquote"&gt;&lt;div id="trquote"&gt;Quote text&lt;/div&gt; &lt;span&gt;[http://www.somesite.com/index.php?topic=49027.0 Author], fragment 761&lt;/span&gt;&lt;/div&gt; 这是修改引号文本的位:foreach( $lines as $line ) { $rand = wfRandom(); $line = preg_replace( "#&lt;br /&gt;''#", "\n" , $line ); $line = preg_replace( "#''#", '', $line ); $line = preg_replace( "#&lt;br /&gt;&lt;i&gt;#", "\n" , $line ); $line = preg_replace( "#&lt;/i&gt;#", '', $line ); $line = $dbr-&gt;addQuotes( $line );
  • 测试 mediawiki 文章中的输出源代码确实可以解析 wikitext,因此这证实了函数中缺少某些内容,而不是上面粘贴的代码中修改引号文本。
  • 你可以尝试混合$wgOut对象的addWikiText和addHTMLText函数。将所有 HTML 标记放在 addHTMLText 函数中,将所有 wikitext 放在 addWikiText 函数中。那应该做的工作......
  • 啊,我忘记了“$wgOut->addWikiText”行的变化。我也实现了,但引用从文章顶部切换到底部!
  • 使用addHTMLText 代替给了我Call to undefined method OutputPage::addHTMLText() 应该是addHTML 而不是与前一个结果相同:引用移到底部!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2021-02-27
  • 1970-01-01
相关资源
最近更新 更多