Extension talk:RandomSelection
Any user names refer to users of that site, who are not necessarily users of MediaWiki.org (even if they share the same username).
[edit] Version 1.5rc4
Just replace the caching section with this:
# Prevent caching
global $wgParser;
$wgParser->disableCache();
--ProgMania 00:01, 4 September 2005 (UTC)
[edit] Option tag
This is a most useful extension, but I would suggest that the <option> tag be replaced by a tag of a different name as this tag already exists in HTML and may lead to a conflict on closed wiki installations that have that tag enabled. Great script. 86.132.17.233 14:16, 8 November 2005 (UTC)
Note that the above conversation may have been edited or added to since the transfer. If in doubt, check the edit history.
[edit] Random articles in category(ies)
An option to show a link to a random article in a specific category (or groups of categories) would be nice; randomized DPL parameters too. —Eep² 13:51, 20 August 2007 (UTC)
[edit] MW_PARSER_VERSION?
I notice that the extension looks at MW_PARSER_VERSION to determine which MediaWiki version is running. This value appears not to be defined at all any more by MediaWiki as of the "new" parser in MW 1.13 (and likely the later 1.12alpha) versions. Will this have any affect on operation? --Carlb 19:59, 23 February 2008 (UTC)
- Well spotted! Fixed in latest version. --Algorithm 21:08, 23 February 2008 (UTC)
One issue I've noticed with the new parser (MW1.13 and later revisions of 1.12) is that template substitution is handled differently than in the old version. This can cause problems if a template containing random choose/option tags is called repeatedly from the same page. On the old MediaWiki, each invocation would yield a different random answer. On the new version, the templates are expanded first, then the same result may be placed in the page multiple times - a problem for templates like {{DidYouKnow}}-style factoids that are used repeatedly to generate one random text item per invocation. Call these as {{DidYouKnow|}} (so that the parser is fooled to think there's a parameter there, which could leave the result subject to change) and they work - an ugly kludge but necessary for pages like http://psyklopedin.org/wiki/Huvudsida and http://desciclopedia.ws/wiki/Síndrome_de_Tourette - at least if all cache support (including APC/memcached) is in use.
Wikia presumably is unaffected so far as their antiquated MediaWiki version still has the old parser, but the current MediaWiki does appear to be acting differently. ¿Que pasa?
- Unfortunately, if this is the case then there's not much I can do with my extension to change it. Your hack is probably the most effective workaround for newer versions. --Algorithm 06:56, 21 April 2008 (UTC)
[edit] Installation
Maybe it's obvious, just I don't actually get how this extension is implemented into my MediaWiki project. I could start guessing which php file to extent with the code, but I'm not (yet) at that level of programming. A hint would be most appreciated. --Carsten3m 10:44, 17 April 2008 (UTC)
- Figured it. For everyone else not having a clue how to install this extension: Add the code at the end of your LocalSettings.php --Carsten3m 11:01, 17 April 2008 (UTC)
The usual method of installing MediaWiki extensions is to put the code into a separate file (whatever.php) then include that file require_once('whatever.php'); somewhere in LocalSettings. This is true of MediaWiki extensions in general - not just this one. --04:46, 21 April 2008 (UTC)
[edit] Undefined property notice
HI, I've just upgraded to MW 1.12, and I'm now getting the following on my main page (which is where I'm using the extension):
Notice: Undefined property: Parser::$mTemplates in /home/restofpath/extensions/RandomSelection.php on line 64
Notice: Undefined property: Parser::$mTemplatePath in /home/restofpath/extensions/RandomSelection.php on line 65
I've also updated my parser extensions to the latest, but still get those messages.
Any ideas?
Thanks 118.92.29.247 06:38, 22 April 2008 (UTC)
- If you're running 1.12, neither of those lines will ever be executed, so feel free to remove them from your local copy. --Algorithm 06:29, 24 April 2008 (UTC)
Thanks! That of course did the trick... 118.92.29.247 06:48, 24 April 2008 (UTC)
[edit] Enhancement - Multiple Items
Hi, I've knocked together an enhancement to allow multiple items to be picked from the options. I've found this useful to create my own simple ad-bar. The syntax is <choose pick="x">
Patch below -- Eclecticdave 21:13, 19 July 2008 (UTC)
diff --git a/RandomSelection.php b/RandomSelection.php
index 04fdc4b..b734473 100644
--- a/RandomSelection.php
+++ b/RandomSelection.php
@@ -29,26 +29,34 @@ function renderChosen( $input, $argv, &$parser ) {
# Prevent caching
$parser->disableCache();
+ $pick = 1;
+ if (isset($argv['pick'])) $pick = intval($argv['pick']);
+
# Parse the options and calculate total weight
$len = preg_match_all("/<option(?:(?:\\s[^>]*?)?\\sweight=[\"']?([^\\s>]+))?"
. "(?:\\s[^>]*)?>([\\s\\S]*?)<\\/option>/", $input, $out);
- $r = 0;
+ $tw = 0;
for($i=0; $i<$len; $i++) {
if(strlen($out[1][$i])==0) $out[1][$i] = 1;
else $out[1][$i] = intval($out[1][$i]);
- $r += $out[1][$i];
+ $tw += $out[1][$i];
}
+ $input = "";
+ for($j=0; $j<$pick; $j++) {
# Choose an option at random
- if($r <= 0) return "";
- $r = mt_rand(1,$r);
+ if($tw <= 0) return "";
+ $r = mt_rand(1,$tw);
for($i=0; $i<$len; $i++) {
$r -= $out[1][$i];
if($r <= 0) {
- $input = $out[2][$i];
+ $input .= $out[2][$i];
+ $tw -= $out[1][$i];
+ $out[1][$i] = 0; # Prevents this item being picked twice
break;
}
}
+ }
# If running new parser, take the easy way out
if( defined( 'Parser::VERSION' ) && version_compare( Parser::VERSION, '1.6.1', '>' ) ) {
[edit] Multiple calls to Temlplated RandomSelection yield same results
I *think* this is some kind of caching issue, but it seems that if I call a template containing RandomSelection multiple times, each template call returns the same random selection on each call, i.e. {{RandomImage}}{{RandomImage}}{{RandomImage}} where RandomImage is a list of graphics, all three will return the same graphic. This is NOT the case if the same page contains multiple choose statements, however, even if those are identical.
So far, the only fix I've found is to force a no-cache on the templates like this: {{RandomImage|1}}{{RandomImage|2}}{{RandomImage|3}} which works but is a tad annoying. I'd prefer to use looping templates like this: {{4x|{{RandomImage}}}}
Any suggestions? Arodicus 20:53, 8 October 2008 (UTC)
[edit] svn
this does not appear to be in mediawiki's svn. would be useful to have it there. NSK Nikolaos S. Karastathis 22:52, 27 October 2008 (UTC)
[edit] For some reason I can't get this extension to work.
I have the code in /extensions/RandomSelection.php and I include it in localsettings via #display random text
require_once("$IP/extensions/RandomSelection.php");
but it doesn't appear to be doing anything. Are you supposed to close the <?php tag? Is there something else I'm missing here?
--69.125.178.237 17:23, 7 October 2009 (UTC)
[edit] Doesn't work on wikipedia?
This doesn't seem to work on Wikipedia, and that's causing conflict with my signature (which works on wikia). The code section is
[[User talk:B1KWikis|<!--
--><font color="{{{c2|0000aa}}}"><!--
--><span title="Click here to talk with me"><!--
-->'''<!--
--><choose><!--
--><option>Wikis</option><!--
--><option>Music</option><!--
--><option>Games</option><!--
--><option>Art</option><!--
--><option>Links</option><!--
--><option>Stuff</option><!--
--><option>Random</option><!--
--></choose><!--
-->'''<!--
--></span><!--
-->]]
Instead of showing one option, it completely ignores it and shows <option>Wikis</option><option>Music</option><option>Games</option><option>Art</option><option>Links</option><option>Stuff</option><option>Random</option> Why won't it Work? --B1KWikis
- The extension is not installed on Wikipedia (see w:Special:Version). Helder 02:57, 15 June 2011 (UTC)