启用mediawiki函数以呈现wikitext

启用mediawiki函数以呈现wikitext,mediawiki,Mediawiki,我的mediawiki版本是1.16.5。我有一个函数,可以从数据库中选择一个随机引用,并将其显示在wiki页面上。斜体和粗体是在我使用html时呈现的,但是,我希望能够使用wikitext,特别是外部链接格式,即 [http://mediawiki.org MediaWiki] 当前,如果使用类似于上述的内容,则不会渲染并按字面显示。这里有一些关于需要什么的参考:但我不知道如何实现这一点 代码如下: function wfGetQuote() { $randstr = wfRando

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

[http://mediawiki.org MediaWiki]
当前,如果使用类似于上述的内容,则不会渲染并按字面显示。这里有一些关于需要什么的参考:但我不知道如何实现这一点

代码如下:

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 );
}
通常我使用这个函数

我会将您的代码修改为:

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';
}

我还没有测试过它,但它可能可以完成您想要的工作。

您不是在开发标记扩展,是吗?不,我只是希望现有的wiki标记在引号文本中工作。谢谢,我尝试过,但输出没有呈现。例如,我得到:引用文本[http://www.somesite.com/index.php?topic=49027.0 这是将引号文本:foreach$行修改为$行的位{$rand=wfRandom;$line=preg\u replace,\n,$line;$line=preg\u replace,$line=preg\u replace,\n,$line;$line=preg\u replace,$line;$line=$dbr->addQuotes$line;测试mediawiki文章中的输出源代码确实解析了wikitext OK,因此这证实了函数中缺少某些内容,而函数中没有粘贴在引号文本上方的代码。您可以尝试混合使用$wgOut对象的addWikiText和addHTMLText函数。将所有HTML标记放在addHTMLText函数中,将所有wikitext放在addWikiText函数中。这应该可以完成工作…啊,我忘记了$wgOut->addWikiText行中的更改。我也实现了这一点,但te将位置从文章的顶部切换到底部!使用addHTMLText,我调用了未定义的方法OutputPage::addHTMLText,它应该是addHTML,这与前面的结果相同:quote移到底部!