Ayuda:Funciones


Esta página es un manual sobre el trabajo con algunas de las funciones utilizadas en la programación wiki y que son están presentes en el software MediaWiki. Todas las funciones tienen la forma:

{{ #functionname: argumento 1 | argumento 2 | argumento 3 ... }}

#expr:

Tipo Operadores
Agrupadores (paréntesis) ( )
Números 1234..   2.56..    2.4E5 e (2.718) pi (3.142)
Lógicos or, and, not
= , != (or <>) , > , < , <= , >=
Redondeo round , ceil , floor , abs
Binarios + , - , mod
* , / (or div)
^
Otros trunc , ln , sin , cos , tan , acos , asin , atan

Esta función, evalúa una expresión matemática, y devuelve el resultado.

Los operadores disponibles están listados a continuación, en orden de preferencia. Para más información sobre la sintaxis y uso de cada operador, se puede consultar la documentación Ayuda:Operaciones de Cálculo. La exactitud y el formato del resultado devuelto, depende del sistema operativo del servidor que ejecuta la wiki, y el formáto numérico que use el servidor.

Los números se dan en decimales desde el punto decimal "."

Los operadores booleanos (verdadero/falso) consideran el 0 como falso (false) y cualquier otro (positivo o negativo) como verdadero (true).

{{#expr: 1 and -1 }} → 1

Un valor vacío en la <expresion>, devuelve un valor vacío; una <expresion> incorrecta o con sintaxis mal formada, devolverá un error que puede ser evaluado con la función #iferror::

{{#expr: }} →
{{#expr: 1+ }} → Error en la expresión: falta un operando para +.
{{#expr: 1 foo 2 }} → Error en la expresión: no se reconoce la palabra «foo».



#if

La función if es de construcción if-then-else. La sintaxis es:

Si la <condición> es una cadena vacía o consiste sólo de espacios en blanco, entonces se considera falsa, y la función da como resultado el <texto else>. De lo contrario, da como resultado el <texto then>. El <texto else> podría omitirse, por lo cual el resultado será una cadena vacía si la condición es falsa.

Por esta razón, si la <condición> es cualquier cadena de texto, devolverá siempre el <texto then>, por este motivo la <condición> no podrá ser del tipo {{#if:1>2|sí|no}};
para comparar números, utilice #ifexpr, y para comparar cadenas, utilice #ifeq

{{#if: | yes | no}} → no
{{#if: string | yes | no}} → yes
{{#if:      | yes | no}} → no
{{#if: | yes | no}} → no

El texto de la <condición>, siempre se interpreta como una cadena, así que no se interpretan expresiones matemáticas.

{{#if: 1==2 | yes | no}} → yes

También se pueden omitir valores.

{{#if: foo | yes }} → yes
{{#if: | yes }} →
{{#if: foo | | no}} →

#ifeq

Esta función compara dos cadenas de texto (o numéricas): <string1> y <string2>; si son iguales, devuelve <valor si identicas>, si no, devuelve <valor si distintas>. Si se trata de cadenas de texto, la función es case sensitive (es decir, que distingue mayúsculas de minúsculas)

Si ambas cadenas a comparar, son cadenas numéricas, las compara numéricamente:

{{#ifeq: 01 | 1 | yes | no}} → yes
{{#ifeq: 0 | -0 | yes | no}} → yes
{{#ifeq: "01" | "1" | yes | no}} → no


#ifexpr

Esta función evalúa una condición lógica –que puede incluir una expresión matemática–, y da como resultado una de dos cadenas, dependiendo que la condición sea o no verdadera.

La <condición> es evaluada como #expr:, –arriba descrita–, y el resultado es evaluado como una expresión booleana, –siendo verdadera, si el resultado es distinto a cero.
La función, es equivalente a usar #ifeq: y #expr:: de esta manera:

{{#ifexpr: 5+3 | yes | no }} = {{#ifeq: {{#expr: 5+3 }} | 0 | no | yes }} → yes

Si la <condición> se deja vacía, la función devuelve <texto else>:

{{#ifexpr: | yes | no}} → no

#iferror

Esta función toma una <cadena de texto de entrada>, y devuelve una cadena de entre dos dadas, en función de que la <cadena de texto de entrada> contenga un objeto HTML con la clase class="error", tal y como se genera en otras parser functions –como #expr:, #time: o #rel2abs: entre otras.

{{#expr: 1 + X }} → Error en la expresión: no se reconoce la palabra «x».
{{#iferror: {{#expr: 1 + 2 }} | error | correcto }} → correcto
{{#iferror: {{#expr: 1 + X }} | error | correcto }} → error
{{#iferror: <span class="error">foo</span> | error | correcto }} → error
{{#iferror: <span class="no-error">foo</span> | error | correcto }} → correcto

Se pueden omitir las cadenas de salida, de manera que si se omite la <cadena devuelta si no hay error>, y resulta que la <cadena de texto de entrada> devuelve error, la función #iferror: devolverá una cadena vacía; en cambio devolverá la misma <cadena de texto de entrada>, si esta no es un objeto HTML con la clase class="error":

{{#iferror: {{#expr: 1 + 2 }} | error }}3
{{#iferror: {{#expr: 1 + X }} | error }}error
{{#iferror: {{#expr: 1 + 2 }} }} 3
{{#iferror: {{#expr: 1 + X }} }}

#ifexist

Esta función toma una cadena de texto, y la evalúa como el título de una página en la wiki local –donde se ejecuta la función–, y devuelve uno de dos valores, dependiendo de que exista o no dicha página en dicha wiki.

La función devuelve <valor si existe>, si la página existe, o apunta a una redirección, o sólo contiene meta-datos.
La función sólo devuelve <valor si no existe>, en caso que la página que se pasa como <título de página>, sea evaluada como un enlace en rojo.

{{#ifexist: Ayuda:Funciones | existe | no existe }} →existe
{{#ifexist: FAKE:Funciones | existe | no existe }} →no existe

En las wikis que usen un repositiorio de archivos –por ejemplo a commons–, se puede usar #ifexist: para ver si un determinado archivo ha sido subido al repositorio.
Para ello, deberá usarse la sintaxis:

{{#ifexist: Medio:Example.png | existe | no existe }} → existe

Cualquiera de las otras referencias usadas devolverán no existe, a menos que se haya creado una página de descripción para ese archivo, en la wiki local en cuestión –independientemente de que haya un archivo en el repositio de la wiki.

{{#ifexist: Archivo:Example.png | existe | no existe }}existe
{{#ifexist: Image:Example.png | existe | no existe }}existe


#rel2abs

Esta función convierte una ruta relativa, en una ruta absoluta, pasándosele la <ruta relativa>, y la <ruta base>.

Para la <ruta relativa> se acepta la siguiente sintaxis:

  • . → el nivel actual
  • .."ir a un nivel superior"
  • /foo/foo2"bajar a un nivel inferior, dentro del subdirectorio: /foo/foo2"
{{#rel2abs: ../. | Ayuda:Foo/bar/baz }} → Ayuda:Foo/bar
{{#rel2abs: ./quok | Ayuda:Foo/bar/baz }} → Ayuda:Foo/bar/baz/quok
{{#rel2abs: ../quok | Ayuda:Foo/bar/baz }} → Ayuda:Foo/bar/quok

Si no se especifica la <ruta base>, se considerará a esta, como la de la página que ejecuta la parser function.

{{#rel2abs: ../quok | Ayuda:Foo/bar/baz }} → Ayuda:Foo/bar/quok
{{#rel2abs: ../quok }} → quok

Si se hace uso de ../ en mayor número que rutas superiores tenga la <ruta base>, la función devolverá error.

{{#rel2abs: ../../quok | Ayuda:Foo/bar/baz }} → Ayuda:Foo/quok
{{#rel2abs: ../../../quok | Ayuda:Foo/bar/baz }} → quok
{{#rel2abs: ../../../../quok | Ayuda:Foo/bar/baz }} → Error: profundidad no válida en la ruta «Ayuda:Foo/bar/baz/../../../../quok» (trataste de acceder a un nodo por encima de la raíz).

#switch

switch compara un sólo valor con varios otros, dando como resultado una cadena si es que se encuentra un valor igual. La sintaxis es básicamente:

| <valor1> = <resultado1>
| <valor2> = <resultado2>
| ...
| <valorn> = <resultadon>
| <resultado por defecto>
}}

switch buscará en cada uno de los valores dados hasta que se encuentre uno que sea igual. Una vez encontrado, la función da el resultado correspondiente (la cadena de texto encontrada después del signo de igual). Si no se encuentra uno igual, pero el último item no tiene un signo igual, se da el <resultado por defecto>. Si tu resultado por defecto debe tener un signo de igual, puedes utilizar #default:

| <value> = <resultado>
| #default = <resultado por defecto>
}}

Nótese que también es posible tener valores "permeables" (reduciendo así la necesidad de duplicar resultados).
Es decir, que si <valor1> y <valor2> no contienen un signo igual, y se les encuentra como valores iguales en la comparación, se da el resultado de <valor3> (es decir, lo que sea que esté como <resultado3>) Por ejemplo:

| <value1>
| <value2>
| <value3> = <resultado3>
| ...
| <valuen> = <resultadon>
| <resultado por defecto>
}}

Como ocurre con #ifeq:, la comparación se hace de forma numérica si es posible; en caso contrario, se comparan las cadenas como case sensitive –diferenciando mayúsculas de minúsculas.

{{ #switch: 07 | 6 | 7 | 8 = resultado 1 | 9 = resultado 2 | #default = valor = por defecto }} → resultado 1
{{ #switch: "07" | 6 | 7 | 8 = resultado 1 | 9 = resultado 2 | #default = valor = por defecto }} → valor = por defecto
{{ #switch: aEioU | aeiou = case-insensitive | aEioU = case-sensitive }} → case-sensitive


#time

Código Descripción devuelve...
Año
Y Año –con cuatro dígitos–. 2019
y Año –con dos dígitos–. 19
L Devuelve 1, si es año bisiesto o 0, si no lo es. 0
o ¹ Año –en formato ISO-8601–. ² 2019 ³

¹ Requiere PHP 5.1.0 o posterior, y la rev:45208
² Esto toma el mismo valor que Y, excepto si el número de la semana –en formato ISO (W) pertenece al año anterior, o posterior, en cuyo caso, se usará ese año.
³ Devolverá o si no se cumplen los requerimientos ¹.

Mes
n Número de mes –sin comenzar por cero–. 4
m Número de mes –con dos cifras–. 04
M Abreviatura del nombre del mes, –en el idioma configurado de la wiki local–. abr
F El nombre completo del mes, –en el idioma configurado de la wiki local–. abril
Semana
W Número de semana, –en formato ISO-8601–, con dos cifras. 17
Día
j Día del mes, –sin comenzar por cero–. 24
d Día del mes –con dos cifras–. 24
z Número de día del año en curso, –El 1 de Enero, es el día 0–. 113
D Abreviatura del día de la semana, –no internacionalizado–. mié
l Nombre del día de la semana, –no internacionalizado–. miércoles
N Día de la semana, –en formato ISO-8601–. 3
w Número del día de la semana –siendo el Lunes, el día número 1–. 3
Hora
a Devuelve am por la mañana (00:00:00-11:59:59), y pm en el otro caso (12:00:00-23:59:59) pm
A Devuelve el valor de a, en mayúsculas. PM
g Devuelve la hora, –en formato de 12-horas, y sin comenzar por cero–. 12
h Devuelve la hora, –en formato de 12-horas, y con dos dígitos–. 12
G Devuelve la hora, –en formato de 24-horas, y sin comenzar por cero–. 12
H Devuelve la hora, –en formato de 24-horas, y con dos dígitos–. 12
Minutos y segundos
i Minutos que pasan de la hora, –con dos dígitos–. 52
s Segundos que pasan del minuto, –con dos dígitos–. 42
U Números de segundos que han pasado desde el 1 de enero de 1970, a las 00:00:00 GMT. 1556110362
Varios
L Devuelve 1, si es año bisiesto –según el calendario Gregoriano– o 0, si no lo es. 0
t Devuelve el número de días que tiene el mes en curso. 30
c Fecha actual, en formato ISO-8601, –equivalente a usar: {{#time:Y-m-dTH:i:s+00:00}}–. 2019-04-24T12:52:42+00:00
r Fecha actual, en formato RFC-2822, –equivalente a usar: {#time:D, j M Y H:i:s +0000}}–, con el nombre del día de la semana y de la semana no internacionalizados. Wed, 24 Apr 2019 12:52:42 +0000
Calendarios no-gregorianos
Iraní
xij Día del mes 4
xiF Nombre completo del mes Ordibehesht
xin Número de mes 2
xiY Número completo del año 1398
Hebreo
xjj Día del mes 19
xjF Nombre completo del mes Nisan
xjx Genitivo del nombre completo del mes Nisan
xjn Número de mes 7
xjY Número completo del año 5779
Año solar tailandés
xkY Número completo del año 2562
Modificadores
xn Formatea el siguiente código de número, como un número ASCII en el idioma de la wiki local. En indú: → ०६, 06
{{#time:H, xnH}}
xN Como xn, pero mantiene su función en todos los caracteres numéricos siguientes, hasta el final de la cadena, o hasta la siguiente aparición de xN en la misma.
xr Formatea el código de número siguiente –menor de 3000–, como un número romano. {{#time:xrY}} → MMXIX
xg Puesto antes de los códigos de mes (n, m, M, F), devuelve la forma en genitivo, –si la wiki local diferencia la forma genitiva, de la nominal–.

Esta función toma un <format string>cadena de texto– según la sintaxis dada –a la derecha–, y lo maneja como un constructor para devolver otra cadena de texto de fecha, hora o calendario.
Por defecto, devuelve la fecha/hora en que la página –que contiene la función– fue mostrada por última vez, tal y como especifica el valor de la palabra mágica {{CURRENTTIMESTAMP}}
Pero también se puede pasar como parámetro un <objeto fecha/hora>, para que la cadena devuelta por la función, sea de acuerdo al objeto pasado.

La lista de <format string> aceptados, aparece en la tabla de la derecha; de esta manera, cualquier carácter que se pase en la <format string>, y que no esté en dicha tabla, quedará inalterado en la cadena de texto devuelta por la función.

{{#time: d-m-Y }} → 24-04-2019
{{#time: d m [[Y]] }} → 24 04 2019
{{#time: i's" }} → 52'42"

Hay dos maneras de usar algún caracter en la <format string> que sea habitualmente reconocido como constructor (ej: m, d, A...), para que no sea empleado como tal en una ocasión particular:

  1. Una backslash (\) seguida de cualquier caracter, se interpreta como que se desea usar sólo ese caracter de forma literal.
  2. Cualquier caracter o caracteres, encerrado/s entre "comilla doble", se interpreta como que se desea usar sólo ese o esos caracteres.
{{#time: "día" d \de m \d\e\l Y }} → día 24 dUTC 04 del 2019
{{#time: [[Y (year)]] }} → 2019 (19UTCpmWed, 24 Apr 2019 12:52:42 +0000)
{{#time: [[Y "(year)"]] }} → 2019 (year)
Usar una hora distinta a la actual

Por defecto, los datos de fecha/hora/calendario, devueltos por la función, son de acuerdo al momento actual; pero se puede hacer que la función #time: trabaje en función de un momento determinado. Para ello, se usa el parámetro opcional <objeto fecha/hora>.

El parámetro <objeto fecha/hora> deberá tener un formato aceptado por la función de PHP: strtotime(), y podrá ser tanto absoluto (ej: 20 December 2000), como relativo al actual (ej: +20 hours).

{{#time: d F Y | 15 April 1999 }} → 15 abril 1999
{{#time: d F Y | 15 April 1999 +4 days}} → 19 abril 1999
{{#time: d F Y | +4 days}} → 28 abril 2019


Se puede usar como <objeto fecha/hora>, una cadena con algunos parámetros sin especificar, en cuyo caso la función usará el valor actual del parámetro que falte:

{{#time: d/m/Y | January 1 }} → 01/01/2019


Si se especifica en <objeto fecha/hora>, un número de cuarto dígitos, este será interpretado, de ser posible, como una hora del tipo: hora:minuto; si no se puede interpretar como una hora válida, se interpretará como un año.

{{#time: Y H:i | 1959 }} → 1959 00:00 Se interpreta como una hora.
{{#time: Y H:i | 1960 }} → 1960 00:00 Se interpreta como año, pues las 19:60 no es hora válida.

La función también hace cálculos matemáticos, cuando se pasan días que no corresponden al número de días posibles del mes pasado como parámetro.

{{#time: d F Y | Jan 0 2008 }} → 31 diciembre 2007 Toma 0, como día 31 del mes anterior.
{{#time: d F Y | Feb 29 2007 }} → 01 marzo 2007 Suma los días de más al mes siguiente.
{{#time: d F Y | Feb 29 2008 }} → 29 febrero 2008 Tiene en cuenta los años bisiestos.

La función reconoce un gran número de zonas horarias:

{{#time:c|12:30PM AZOT}}Error: fecha y hora no válidos.
{{#time:c|12:30PM Europe/Madrid }}Wed, 24 Apr 2019 10:30:00 +0000

#titleparts

Esta función separa el título de una página –pasada la ruta como parámetro–, lo divide en segmentos según los slashesbarras (|)– que tenga, y devuelve el segmento o segmentos que se le pida.

Si no se especifica el numero de <segmentos a devolver>, el valor por defecto es 0, es decir, que se devuelven todos los segmentos.
Si no se especifica el <primer segmento> devuelto, o se especifica como 0, el valor por defecto es 1:

{{#titleparts: Discusión:Foo/bar/baz/quok }}Discusión:Foo/bar/baz/quok
{{#titleparts: Discusión:Foo/bar/baz/quok | 1 }}Discusión:Foo
{{#titleparts: Discusión:Foo/bar/baz/quok | 2 }}Discusión:Foo/bar
{{#titleparts: Discusión:Foo/bar/baz/quok | | 2 }}bar/baz/quok
{{#titleparts: Discusión:Foo/bar/baz/quok | 2 | 2 }}bar/baz

Se aceptan valores negativos para ambos parámetros.
Un número negativo en <segmentos a devolver>, se entiende como cuántas partes se eliminarán, contando desde el final.
Un número negativo como <primer segmento>, lo toma contando desde la derecha.

{{#titleparts: Discusión:Foo/bar/baz/quok/foo1/foo2/foo3/foo4 | -1 | -3 }} → foo2/foo3
{{#titleparts: Discusión:Foo/bar/baz/quok/foo1/foo2/foo3/foo4 | -2 | 3}} → baz/quok/foo1/foo2
{{#titleparts: Discusión:Foo/bar/baz/quok/foo1/foo2/foo3/foo4 | 2 | -3 }} → foo2/foo3
{{#titleparts: Discusión:Foo/bar/baz/quok/foo1/foo2/foo3/foo4 | 2 | 3}} → baz/quok
{{#titleparts: Discusión:Foo/bar/baz/quok/foo1/foo2/foo3/foo4 | | -3 }} → foo2/foo3/foo4
{{#titleparts: Discusión:Foo/bar/baz/quok/foo1/foo2/foo3/foo4 | | 3 }} → baz/quok/foo1/foo2/foo3/foo4
{{#titleparts: Discusión:Foo/bar/baz/quok/foo1/foo2/foo3/foo4 | -2 }} → Discusión:Foo/bar/baz/quok/foo1/foo2
{{#titleparts: Discusión:Foo/bar/baz/quok/foo1/foo2/foo3/foo4 | 2 }} → Discusión:Foo/bar

Advertencias

Sustitución

Una función del analizador sintáctico puede ser sustituida por su valor, de manera automática cuando se guarda la página, añadiendo el prefijo subst: al nombre de la función.


Esta "sustitución" hace que una vez que la página ha sido guardada, la parser function dejará de actuar como tal, para pasar a tener de manera definitiva, el valor que tenía en el momento exacto del guardado:

{{#time:j/M/Y(H:i)}} → 24/abr/2019(12:52) La parser function, hace que cada vez que alguien ve esa página, se muestre la fecha/hora de la wiki local en ese momento concreto.
{{subst:#time:j/M/Y(H:i)}} → 19/May/2009(11:27) Guarda la fecha/hora en que se guardó la página, y así queda para futuras visitas.

Tablas

Las funciones pueden arruinar la sintaxis de las wikitablas, tomando todos los caracteres de una celda, como parámetros de la función (en tanto que se usa el mismo caracter para separar celdas, que para separar parámetros «|» dentro de una parser function).
Hay dos maneras de evitar este inconveniente:

  • Para evitar esto, la mayoría de las wikis disponen de la plantilla {{Plantilla:!}}, cuyo contenido es el caracter en cuestión «|». Esto, oculta el caracter problemático para el analizador de MediaWiki, asegurando que no se tenga encuenta el mismo, hasta que todas las plantillas, variables y funciones, hayan sido expandidas.
  • También se puede usar la sintaxis de tablas propia del HTML.

Caracteres en blanco

Los caracteres en blanco, tabulaciones, espacios o saltos de línea son eliminados al principio y el final de todos los parámetros de estas parser function. Si se desea conservar estos caracteres especiales, se puede usar algún caracter especial del HTML, o codificación Unicode antes o después de los caracteres en blanco, tabulaciones, espacios o saltos de línea que se quieran mantener como parámetros.

{{#ifeq: foo    |    foo | igual | distinto }} → igual
{{#ifeq: foo   &#32|&#32;   foo | igual | distinto }} → distinto