From MediaWiki.org
Jump to: navigation, search
MediaWiki extensions manual
Crystal Clear action run.png

Release status: experimental

Implementation Parser function
Description Defines an additional set of parser functions
Author(s) Ross McClure (Algorithm~mediawikiwikitalk)
Latest version 1.1 (2006-11-25)
MediaWiki 1.8+
Database changes No
License No license specified
Download See the code section
Hooks used

Translate the DynamicFunctions extension if it is available at translatewiki.net

Check usage and version matrix; code metrics

The DynamicFunctions extension defines an additional set of parser functions that provide dynamic functionality and cannot be cached.


This module defines four functions: arg, ip, rand, and skin. All of these functions operate in constant time.


The #arg function returns the value of the given URL argument. The syntax is:

{{#arg:parameter name|default}}.

The default parameter is optional; if defined, it is returned when the argument does not exist.

Thus, instead of including a page for given parameter values, this allows linking to a page for given parameter values. Syntax for linking: external link style with zero or more times "&parameter name=parameter value" added to the URL. The link can be to the same page with different parameter values, or to a different page. In the former case the new values can depend on the old ones.


The #ip function returns the IP address of the current user. No arguments are required. This should correspond to the IP in the last line of Special:Version.


The #rand function returns a random integer value. The syntax is:


#rand returns a value between a and b, inclusive. If b is omitted, #rand returns a value between 1 and a (hence, {{#rand:6}} emulates a dice roll).

The function is PHP function mt-rand.


The #skin function returns the name of the current skin. No arguments are required.


  • Copy the code into a file and place the file(s) in a directory called DynamicFunctions in your extensions/ folder.
  • Add the following code at the bottom of your LocalSettings.php:
require_once "$IP/extensions/DynamicFunctions/DynamicFunctions.php";
  • YesY Done - Navigate to Special:Version on your wiki to verify that the extension is successfully installed.



 Defines a subset of parser functions that must clear the cache to be useful.

 {{#arg:name}} Returns the value of the given URL argument.  Can also be called
               with a default value, which is returned if the given argument is
               undefined or blank: {{#arg:name|default}}

 {{#ip:}}      Returns the current user IP.

 {{#rand:a|b}} Returns a random value between a and b, inclusive.  Can
               also be called with a single value; {{#rand:6}} returns a
               random value between 1 and 6 (equivalent to a dice roll).

 {{#skin:}}    Returns the name of the current skin.

 Author: Algorithm [http://meta.wikimedia.org/wiki/User:Algorithm]
 Version 1.1 (11/25/06)


# Not a valid entry point, skip unless MEDIAWIKI is defined
if ( !defined( 'MEDIAWIKI' ) ) {
   die( 'This file is a MediaWiki extension, it is not a valid entry point' );

$wgExtensionFunctions[] = 'wfDynamicFunctions';
$wgExtensionCredits['parserhook'][] = array(
	'name' => 'DynamicFunctions',
	'version' => '1.1',
	'url' => 'https://www.mediawiki.org/wiki/Extension:DynamicFunctions',
	'author' => 'Ross McClure',   
	'description' => 'Defines an additional set of parser functions.'

$wgHooks['LanguageGetMagic'][] = 'wfDynamicFunctionsLanguageGetMagic';

function wfDynamicFunctions() {
	global $wgParser, $wgExtDynamicFunctions;

	$wgExtDynamicFunctions = new ExtDynamicFunctions();

	$wgParser->setFunctionHook( 'arg', array( &$wgExtDynamicFunctions, 'arg' ) );
	$wgParser->setFunctionHook( 'ip', array( &$wgExtDynamicFunctions, 'ip' ) );
	$wgParser->setFunctionHook( 'rand', array( &$wgExtDynamicFunctions, 'rand' ), SFH_OBJECT_ARGS );
	$wgParser->setFunctionHook( 'skin', array( &$wgExtDynamicFunctions, 'skin' ) );

function wfDynamicFunctionsLanguageGetMagic( &$magicWords, $langCode ) {
	switch ( $langCode ) {
		$magicWords['arg']    = array( 0, 'arg' );
		$magicWords['ip']     = array( 0, 'ip' );
		$magicWords['rand']   = array( 0, 'rand' );
		$magicWords['skin']   = array( 0, 'skin' );
	return true;

class ExtDynamicFunctions {

	function arg( &$parser, $name = '', $default = '' ) {
		global $wgRequest;
		return $wgRequest->getVal($name, $default);

	function ip( &$parser ) {
		return wfGetIP();

	function rand( &$parser, $frame, $args ) {
		$a = isset( $args[0] ) ? $frame->expand( $args[0] ) : 0;
		$b = isset( $args[1] ) ? $frame->expand( $args[1] ) : 1;
		if ( is_callable( array( $frame, 'setVolatile' ) ) ) {
			$frame->setVolatile(); // see bug #58929
		return mt_rand( intval($a), intval($b) );

	function skin( &$parser ) {
		global $wgUser, $wgRequest;
		return $wgRequest->getVal('useskin', $wgUser->getOption('skin'));

See also[edit]