Extension:DynamicFunctions
![]() |
This extension stores its source code on a wiki page. Please be aware that this code may be unreviewed or maliciously altered. They may contain security holes, outdated interfaces that are no longer compatible etc. Note: No localisation updates are provided for this extension by translatewiki.net. |
DynamicFunctions Release status: experimental |
|||
---|---|---|---|
Implementation | Parser function | ||
Description | This extension defines an additional set of parser functions. | ||
Author(s) | Ross McClure (Algorithmtalk) | ||
Latest version | 1.1 (2006-11-25) | ||
MediaWiki | 1.8+ | ||
Database changes | No | ||
License | No license specified | ||
Download | see below | ||
|
|||
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.
Install[edit | edit source]
require_once("$IP/extensions/DynamicFunctions/DynamicFunctions.php");
Usage[edit | edit source]
This module defines four functions: arg, ip, rand, and skin. All of these functions operate in constant time.
#arg:[edit | edit source]
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 "¶meter 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.
#ip:[edit | edit source]
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.
#rand:[edit | edit source]
The #rand function returns a random integer value. The syntax is:
{{#rand:a|b}}
#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.
#skin:[edit | edit source]
The #skin function returns the name of the current skin. No arguments are required.
Code[edit | edit source]
<?php /* 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 ) { default: $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; $parser->disableCache(); return $wgRequest->getVal($name, $default); } function ip( &$parser ) { $parser->disableCache(); 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; $parser->disableCache(); if ( is_callable( array( $frame, 'setVolatile' ) ) ) { $frame->setVolatile(); // see bug #58929 } return mt_rand( intval($a), intval($b) ); } function skin( &$parser ) { global $wgUser, $wgRequest; $parser->disableCache(); return $wgRequest->getVal('useskin', $wgUser->getOption('skin')); } }