wangsisi 发表于 2010-12-25 16:24:04

MediaWiki扩展:随机展示

This extension allows for randomly-generated content inside your wiki; e.g. rotating images, random greetings, etc.

Example

The code in this page will only work in MediaWiki 1.5 and above. (Alternate version for 1.4.x)

Algorithm 05:57, 8 September 2005 (UTC)

<?php
# Wiki random selection extension
# Randomly chooses one of the given options to display.
# Usage: <choose><option>A</option><option>B</option></choose>
# Optional parameter: <option weight="3"> == 3x weight given

$wgExtensionFunctions[] = "wfChooseExt";

function wfChooseExt()
{
   global $wgParser;
   $wgParser->setHook( "choose", "renderChosen" );
}

function renderChosen( $input )
{
   # Prevent caching
   global $wgParser;
   $wgParser->disableCache();

   # Choose an option at random
   $len = preg_match_all("/<option(?:(?:\\s[^>]*?)?\\sweight=[\"']?([^\\s>]+))?"
         . "(?:\\s[^>]*)?>([\\s\\S]*?)<\\/option>/", $input, $out);
   $r = 0;
   for($i=0; $i<$len; $i++)
   {
         if(strlen($out[$i])==0) $out[$i] = 1;
         else $out[$i] = intval($out[$i]);
         $r += $out[$i];
   }
   if($r <= 0) return "";
   $r = mt_rand(1,$r);
   for($i=0; $i<$len; $i++)
   {
         $r -= $out[$i];
         if($r <= 0)
         {
             $input = $out[$i];
             break;
         }
   }

   # Render chosen text
   global $wgUser, $wgTitle;
   $parserOptions = ParserOptions::newFromUser( $wgUser );
   $localParser = new Parser();
   $input = $localParser->parse($input, $wgTitle, $parserOptions, false);
   return $input->mText;
}
?>
页: [1]
查看完整版本: MediaWiki扩展:随机展示

BlueHost美国主机优惠码