Jump to content

Ayuda:Plantillas

From mediawiki.org
This page is a translated version of the page Help:Templates and the translation is 99% complete.
Outdated translations are marked like this.
PD Nota: Cuando editas esta página, aceptas liberar tu contribución bajo la licencia CC0. Para más información mira las páginas de ayuda de dominio público. PD

Si tienes textos estándar que quieras incluir en varias páginas, la funcionalidad plantilla de MediaWiki entra en juego. A diferencia de las extensiones y archivos multimedia , no existe un repositorio central para plantillas. Las plantillas pueden ser escritas nuevamente o, para guardar trabajo duplicado ya hecho, exportadas desde otro wiki (por ejemplo, Wikipedia), y luego importado al wiki objetivo.

Uso básico

Las plantillas son páginas wiki estándar cuyo contenido está diseñado para ser transcluido (incrustado) en otras páginas. Las plantillas siguen la convención de que el nombre está prefijado con "Template:", asignándolo a dicho espacio de nombres. Además de esto, puedes crearlas de la misma forma que cualquier otra página wiki.

Para transcluir una plantilla, utiliza llaves dobles de apertura y cierre {{nombre de plantilla}}.

El uso más simple de plantillas es el siguiente: Crea una página llamada Template:Welcome con el contenido de abajo:

¡Hola! Te damos la bienvenida al wiki.

¡Has creado tu primera plantilla! Ahora, inserta el código de abajo en una nueva página:

{{Welcome}}

Cuando se visualice esa página aparecerá el texto "¡Hola! Te damos la bienvenida al wiki" en lugar de {{Welcome}}. El contenido de la plantilla se transcluye a la otra página, es decir, se integra en la página.

Luego puedes insertar {{Welcome}} en cualquier punto de cualquier página donde desees darle la bienvenida a alguien. Supongamos que se usa en 100 páginas. Si luego cambias el contenido de la plantilla a:

¡Buenas! Te damos la bienvenida a este maravilloso wiki.

Y vuelves a ver cualquiera de las 100 páginas donde se usó la plantilla, verás el nuevo texto en lugar del original. De esta manera, has cambiado el contenido de 100 páginas sin editarlas, porque la plantilla se transcluye en estas páginas.

Este es el mecanismo básico. Hay varias características adicionales de transclusión que enriquecen este mecanismo y hacen que las plantillas sean muy útiles.

Maneras de invocar una plantilla

Las plantillas se pueden usar en otras páginas de las siguientes maneras:

  • {{Nombre}}: como se describió arriba, este texto (comúnmente conocido como "llamada de plantilla") será reemplazado de forma dinámica por el contenido de la página llamada Plantilla:Nombre (un proceso llamado "transclusión") cada vez que la página con la llamada de plantilla sea cargada (es decir, vista por un lector del wiki). Como la llamada de plantilla permanece en la fuente de la página, cualquier cambio posterior a Plantilla:Nombre se verá en la página que tenga la llamada de plantilla. Además, la página se incluirá entre las que "enlazan" a la plantilla.
  • {{subst:Nombre}}: cuando este tipo de llamada de plantilla se utiliza, se reemplazará por una copia estática del contenido de Plantilla:Nombre al momento en el que se guarda la página que contenga la llamada de plantilla. Es decir, una copia de los contenidos de Plantilla:Nombre se sustituirán para la llamada de plantilla. No se mantiene ningún enlace entre la página y la plantilla, por lo que cada una puede ser editada más adelante sin afectar a la otra. De hecho, no hay mucha diferencia entre sustituir el contenido de esta manera y simplemente escribirlo en la fuente de la página "manualmente". Véase Help:Substitution para más información.
  • {{safesubst:Nombre}}: esto se introdujo para permitir la sustitución recursiva en casos donde las plantillas contengan llamadas a otras plantillas o funciones sintácticas. Véase Help:Substitution para más información.
  • {{msgnw:Nombre}}: esto muestra el contenido de la plantilla como sintaxis wiki sin formato (de la misma manera que ‎<nowiki>) cuando se visualice la página que lo contenga.

Por ejemplo, {{msgnw:Template:Thankyou}} muestra:

<noinclude> <languages/> </noinclude> '''Un pequeño agradecimiento...''' por {{{reason|{{{1}}}}}}. Abrazos, {{{signature|{{{2}}}}}} <noinclude> [[Category:Template examples{{#translation:}}|{{PAGENAME}}]] </noinclude>

De hecho, una página wiki ordinaria también se puede utilizar como plantilla, simplemente especificando el espacio de nombres en el que reside, por lo que:

  • {{Plantilla:Nombre de página}} transcluye la página llamada Plantilla:Nombre de página (equivalente a {{Nombre de página}})
  • {{Discusión:Nombre de página}} transcluye la página llamada Discusión:Nombre de página
  • {{:Nombre de página}} transcluye la página llamada Nombre de página (en este caso, del espacio de nombres principal)
    • {{subst::Nombre de página}} sustituye los contenidos de la página llamada Nombre de página

Si el espacio de nombres especificado no existe, se asume que el título completo es una plantilla:

  • {{Foo:Bar}} transcluye Template:Foo:Bar

Independientemente de la sintaxis utilizada, el nombre de la plantilla puede ser relativo a la página actual Por ejemplo, si se llama {{/bar}} en la página foo, se transcluirá la página foo/bar.

También puede generarse dinámicamente. Por ejemplo, {{ {{foo}} }} llama a Template:foo e interpreta el resultado como el nombre de otra plantilla para llamar.

Parámetros

Para enriquecer el mecanismo de transclusión, MediaWiki permite que los parámetros se introduzcan a una plantilla cuando se transcluya. Los parámetros permiten que la plantilla produzca contenidos diferentes o tenga diferentes comportamientos.

Supongamos que quieres insertar una pequeña nota de agradecimiento en la página de discusión de otros usuarios, como:


Un pequeño agradecimiento... por todo tu esfuerzo. Abrazos, Yo


La nota de agradecimiento tendrá una razón (en este caso, "todo tu esfuerzo") y una firma ("Yo"). Tu objetivo es que cualquier usuario sea capaz de agradecer a cualquier otro usuario, por cualquier razón.

Para que la nota se vea similar en todas las partes donde se utilice, se puede definir una plantilla llamada Template:Thankyou , por ejemplo. Aunque la nota debe parecer similar cada vez que un usuario agradezca a otro usuario, sus contenidos específicos (es decir, la razón y la firma) serán diferentes. Por esa razón, debes introducirlos como parámetros. Si ignoramos los elementos restantes para darle formato a la casilla y colocar la imagen, el contenido central de la plantilla será este:

'''Un pequeño agradecimiento...'''
por {{{1}}}.
Abrazos, {{{2}}}

Observa el uso de {{{1}}} y {{{2}}}. Esta es la manera de identificar, dentro de las plantillas, los parámetros que se introducirán cuando se utilice la plantilla. Observa que, dentro de la plantilla, cada parámetro está rodeado por tres llaves: {{{ }}}. Esto es diferente del uso normal de los nombres de plantilla.

Cuando se utiliza la plantilla en una página, tienes que llenar los valores de parámetros, separados por un carácter "pleca" (|). MediaWiki permite que los parámetros se pasen a la plantilla de tres maneras: Anónimo, Numerado y Nombrado.

Parámetros anónimos

Para introducir parámetros anónimos, coloca los valores de esos parámetros secuencialmente:

{{Thankyou|todo tu esfuerzo|Yo}}

En este caso, la plantilla {{Thankyou}} recibe los parámetros {{{1}}}=todo tu esfuerzo y {{{2}}}=Yo, produciendo:


Un pequeño agradecimiento... por todo tu esfuerzo. Abrazos, Yo


El orden en el que se introducen los parámetros anónimos es crucial para su comportamiento. Invertir el orden de los parámetros, de modo que:

{{Thankyou|Yo|todo tu esfuerzo}}

produciría este resultado:


Un pequeño agradecimiento... por Yo. Abrazos, todo tu esfuerzo


Identificar parámetros por su orden (con {{{1}}}, etc.) funciona solo con parámetros anónimos. Cualquier parámetro identificado por su nombre, como se muestra a continuación, no será accesible para la plantilla usando números ordinarios.
Si aparece un signo igual (=) dentro del argumento de un parámetro de plantilla anónimo, ese parámetro puede malinterpretarse como un parámetro nombrado (lo que se explica más adelante en este documento) tratando el texto antes del signo igual como el nombre del parámetro y el texto después como el valor del argumento. Este es un problema común cuando necesites incluir un enlace externo, o un elemento HTML con atributos (véase T16235). La solución es utilizar en su lugar parámetros nombrados, o incluso parámetros numerados como se explica en la siguiente sección.

Parámetros numerados

Para pasar los parámetros por número, identifica cada parámetro al introducirlo:

{{Thankyou|2=Yo|1=tu amistad}}

Esta vez, la plantilla {{Thankyou}} recibe los parámetros {{{1}}}=tu amistad y {{{2}}}=Yo, aunque hayan sido colocados de forma inversa, y produce:


Un pequeño agradecimiento... por tu amistad. Abrazos, Yo


Esto también puede resultar útil cuando alguno de los parámetros numerados contenga un signo "=".
Ejemplos
{{Thankyou|1=agregando "="|2=Yo}}

produce:


Un pequeño agradecimiento... por agregando "=". Abrazos, Yo

Advertencia Advertencia: Esto también requiere numerar cada uno de los otros parámetros.

Parámetros nombrados

La tercera manera de introducir parámetros es por nombre en lugar de números. En este caso, el contenido de la plantilla se cambiaría a:

'''Un pequeño agradecimiento...'''
por {{{razón}}}.
abrazos, {{{firma}}}

Dentro de la plantilla, usamos {{{razón}}} y {{{firma}}} para identificar cada parámetro, en lugar de un número. Para pasar estos parámetros por nombre, identifica cada parámetro al introducirlo:

{{Thankyou|firma=Yo|razón=ser quien eres}}

En este caso, la plantilla {{Thankyou}} recibe los parámetros {{{razón}}}=ser quien eres y {{{firma}}}=Yo y produce:


Un pequeño agradecimiento... por ser quien eres. Abrazos, Yo


Los parámetros nombrados distinguen entre mayúsculas y minúsculas, por lo que:

{{Thankyou|firma=Yo|Razón=ser quien eres|razón=distinguir entre mayúsculas y minúsculas}}

produce:


Un pequeño agradecimiento... por distinguir entre mayúsculas y minúsculas. Abrazos, Yo


La ventaja de utilizar parámetros nombrados en tu plantilla, además de ser flexible en el orden en el cual puedes introducir parámetros, es que hace que el código de la plantilla sea mucho más fácil de entender si hay muchos parámetros.

Los espacios y las líneas nuevas se eliminan automáticamente del principio y del final de los nombres y valores de parámetros nombrados, pero se conservan en parámetros anónimos.

Combinar parámetros nombrados y anónimos

Si la plantilla lo admite, ambos tipos de parámetros se pueden utilizar en una sola llamada.

Por ejemplo, {{Thankyou|supporting both parameter types|signature=Me}} da como resultado:


Un pequeño agradecimiento... por supporting both parameter types. Abrazos, Me


Ten cuidado al hacer esto, porque puede resultar en resultados poco intuitivos ya que los recuentos de parámetros anónimos se basan solo en los parámetros anónimos, no en los parámetros nombrados. Por ejemplo, {{Thankyou|Me|reason=supporting both parameter types}} da como resultado:


Un pequeño agradecimiento... por supporting both parameter types. Abrazos, {{{2}}}


La plantilla está codificada para preferir el parámetro nombrado por la razón sobre el parámetro anónimo, lo que resulta en que el "Yo" se pierde y no se da ninguna firma. Esto resulta en un valor predeterminado de {{{2}}} que es mostrado, como se describe debajo:

Valores predeterminados

Si transcluyes una plantilla que espera parámetros, pero no proporcionas sus argumentos, de esta manera:

{{Thankyou}}

en el ejemplo de parámetros numerados de arriba obtendrías lo siguiente:


Un pequeño agradecimiento... por {{{1}}}. Abrazos, {{{2}}}


Como no se introdujeron argumentos, la plantilla presenta los parámetros en sí, en lugar de sus respectivos valores. En estos casos, puede ser útil definir valores predeterminados para los parámetros, es decir, valores que se utilizarán si no se introduce ningún valor. Por ejemplo, si el contenido de la plantilla se cambia a:

'''Un pequeño agradecimiento...'''
por {{{razón|todo}}}.
Abrazos, {{{firma|Yo}}}

entonces, {{{razón|todo}}} define que si no se proporciona ningún argumento para el parámetro {{{razón}}}, se utilizará el valor todo. De manera similar, {{{firma|Yo}}} establece como predeterminado el parámetro {{{firma}}} en el valor Yo. Ahora, al volver a transcluir la plantilla sin introducir ningún argumento, se obtiene lo siguiente:


Un pequeño agradecimiento... por todo. Abrazos, Yo


El valor de un parámetro puede ser una cadena vacía. Por ejemplo, en {{foo|bar=}} o {{foo|bar=|baz=qux}}, la plantilla foo considera que el parámetro bar es "". Esto es diferente de omitir el parámetro por completo, lo que lo deja indefinido y activa el mecanismo de valor predeterminado descrito anteriormente.
Si necesitas tratar una cadena vacía de la misma manera que un parámetro faltante, puedes usar un operador condicional a través de una extensión como ParserFunctions. Por ejemplo, {{#if:{{{1|}}}|{{{1|}}}|undefined}} muestra si el parámetro es indefinido o está vacío, mientras que {{{1|undefined}}} lo hace solo si el parámetro es indefinido.

A menudo se utilizan valores predeterminados para especificar nombres alternativos de parámetros. Por ejemplo, si tienes {{{a|{{{b|}}} }}}, la plantilla buscará primero un parámetro llamado "a". Si no está definido, utilizará el parámetro llamado "b". Si no se define ni "a" ni "b" no se emitirá nada.

Introducir parámetros a otras plantillas

Si la sintaxis de parámetro sin formato se genera mediante la llamada de plantilla anterior y luego se introduce a otra plantilla, no se interpreta como un parámetro. Esto significa que {{Thankyou2 }}, que solo llama a {{Thankyou }} sin parámetros, no funciona: {{thankyou2|everything|me}}Un pequeño agradecimiento... por {{{1}}}. Abrazos, {{{2}}}


En su lugar, necesitas introducir explícitamente el parámetro a la otra plantilla, es decir, si {{Thankyou3 }} contiene

{{thankyou|{{{1}}}|{{{2}}}}}

entonces funciona adecuadamente: {{thankyou3|everything|me}}Un pequeño agradecimiento... por everything. Abrazos, me


Este ejemplo no conserva la diferencia entre valores de parámetro indefinidos y vacíos, por lo que necesitas una sintaxis algo más complicada si quisieras hacerlo.

Diferencia entre parámetros vacíos e indefinidos

El ejemplo {{t2demo|| a }} (consulta {{T2demo }}), con doble pleca, establece el primer parámetro en una cadena vacía en lugar de dejarla indefinida. Produce start--middle- a -end como resultado, similar a como {{t2demo|1=|2= a }} resulta en start--middle- a -end. Por otro lado, si se establece explícitamente el parámetro "2" en "a", el primer parámetro anónimo quedará indefinido:

{{t2demo|2= a }} da como resultado start-{{{1}}}-middle- a -end

Si no se debe recortar el segundo parámetro, debe ser anónimo.

Por lo tanto, puedes asignar una cadena vacía al primer parámetro, pero no puedes dejarlo indefinido.

Hacer que vacío e indefinición sean equivalentes

Las buenas prácticas de codificación de plantillas resultan en introducir una cadena vacía a un parámetro que funcione de la misma manera que no asignar ningún valor. Esto hace las cosas más fáciles y consistentes.

Por ejemplo, usar p= puede mostrar que una plantilla tiene un parámetro "p" que aún no tiene un valor.

Para hacer una cadena vacía y un equivalente de valor indefinido, usa los siguientes métodos:

  • Utiliza {{{p|}}} exclusivamente en lugar de {{{p}}} o q donde "q" es un valor no vacío.
  • Utiliza controles condicionales como {{#if:{{{p|}}}|..{{{p}}}..|..}}, para asegurarte de que {{{p}}} solo se use cuando tenga un valor.

Si por alguna razón deseas tratar a los parámetros indefinidos de manera diferente a los parámetros vacíos o a cualquier otro valor posible, puedes comparar el mismo parámetro dos veces con diferentes valores predeterminados, es decir, {{#ifeq:{{{foo|bar}}}|{{{foo|baz}}}|parameter is defined|parameter is undefined}}.

Usar signos de igualdad en parámetros anónimos

Los parámetros anónimos pueden incluir signos de igualdad (=), pero esto debe hacerse indirectamente. Aquí hay algunos métodos que utilizan template:T1demo:

Valor predeterminado para un parámetro indefinido

Asigna un valor predeterminado a un parámetro indefinido:

{{T1demo|{{{1| a=b }}}}}

Esto da como resultado: start a=b end.

Utilizar la función sintáctica {{=}}

Utiliza una función sintáctica que incluya de forma segura un signo de igualdad:

{{T1demo| a{{=}}b }}

Esto da como resultado: start a=b end.

Entidades HTML

Reemplaza el signo de igualdad con una entidad HTML para su visualización:

{{T1demo| a&#61;b }}

Esto da como resultado: start a=b end.

Esto se muestra correctamente sin afectar a los otros parámetros.

Manejar corchetes y llaves no emparejados

Las llaves ({{, }}) o corchetes ([[, ]]) no coincidentes deben estar dentro de etiquetas nowiki o utilizar entidades HTML:

  • Mostrar llaves tiene dos opciones:
    • Usa <nowiki>{{</nowiki> o &#123; para {
    • Utiliza <nowiki>}}</nowiki> o &#125; para }.
  • Utiliza &#91; para [ y &#93; para ].

Aquí hay unos ejemplos:

Llaves no emparejadas
{{T1demo| <nowiki>{{</nowiki>content<nowiki>}}</nowiki> }}

Esto muestra correctamente las llaves sin romper la plantilla.

Corchetes no emparejados
{{T1demo| text [link] more text }}

Esto muestra correctamente los corchetes sin romper la plantilla.

Esto da como resultado: start text [link] more text end

Los pares no emparejados que no sean colocados en etiquetas nowiki impiden la expansión de la plantilla o se toman como símbolos de cierre para la llamada de plantilla.

Aquí hay unos ejemplos:

{{T1demo|abc]]def[[ghi}}

Esto no se expandirá correctamente debido a los corchetes no emparejados.

El uso correcto sería:

{{T1demo|abc<nowiki>]]</nowiki>def<nowiki>[[</nowiki>ghi}}

Esto da como resultado: startabc]]def[[ghiend

Símbolos generados por plantillas

Una técnica alternativa para introducir argumentos con llaves o corchetes no emparejados es utilizar otra plantilla. En esa situación, (que existe con {{(( }} y {{)) }}) en este wiki), los símbolos no emparejados se mostrarán literalmente, y no se decodificarán como otra llamada de plantilla. Por ejemplo:

{{t1demo|{{((}}t1demo{{))}}}}

resulta en: start{{t1demo}}end

Al sustituir una plantilla, las inclusiones de plantilla se analizan una vez que la sustitución suceda (con las mismas advertencias explicadas anteriormente) y luego una segunda vez cuando se muestre el wikitexto resultante. Por ejemplo:

{{subst:((}}t1demo|foo}}

se expandirá al guardar a:

{{t1demo|foo}}

que luego se mostrará como:

startfooend

Si el wikitexto generado a través de la primera sustitución incluye la sintaxis "subst:", este no se procesará en el mismo guardado, sino que puede estar en el siguiente. Esta técnica puede ser utilizada para implementar sustituciones recursivas que realicen múltiples guardados para evaluar.

Usar plecas en valores de parámetro

Un valor de parámetro no puede contener un símbolo de pleca (|), porque se interpretaría como el final de ese parámetro y el comienzo del siguiente. Esto se puede solucionar usando la función sintáctica {{!}}, o la entidad HTML &124;. Los dos métodos para hacer esto tienen un comportamiento ligeramente diferente, lo que puede ser relevante en algunos casos especiales, como cuando una plantilla produce sintaxis de wikitabla.

Ejemplo: {{T1demo|abc|def}} produce: startabcend

El valor "def" no se muestra porque se trata como parte de otro parámetro sin nombre, que la plantilla no utiliza.

{{T1demo|abc{{!}}def}} produce: startabc|defend

El valor "def" se muestra correctamente.

{{T1demo|abc&#124;def}} produce: startabc|defend

El valor "def" se muestra correctamente de nuevo.

Dar formato a llamadas de plantilla utilizando parámetros adicionales

Dado que las plantillas ignoran los parámetros que se les introduce pero no manejan específicamente, pueden usarse como una manera de agregar espacio en blanco adicional o contenido no utilizado a la llamada de plantilla.

Por ejemplo:

{{template name|foo|bar|baz|mumble|quux}}

es equivalente a, suponiendo que la plantilla no reconozca SPACEN como nombre de parámetro:

{{template name|SPACE1=
|foo|SPACE2=
|bar|SPACE3=Random stuff
|baz|SPACE4=
   |mumble|SPACE5=
  quux
}}

También es posible usar el mismo nombre para cada espaciador (a menudo la cadena vacía), pero esto llenará Category:Pages using duplicate arguments in template calls, que muchos wikis prefieren mantener vacía para detectar casos de error de usuario.

Esto se puede usar para hacer que la plantilla se muestre de una manera similar a su resultado, como mostrar cada fila de w:Template:Chess position por sí sola, para hacer que el wikitexto también parezca un tablero de ajedrez.

Rastrear uso de parámetros

Véase también: Help:Tracking categories


Puede ser prudente que una plantilla añada un enlace o categoría a una página si se utiliza un determinado parámetro o combinación de parámetros, para que, si es posible, se determine fácilmente qué páginas utilizan un parámetro determinado, y por lo tanto, cuál serían el impacto de cambiar ese parámetro en la plantilla.

Proceso de evaluación

Este es un tema avanzado que puedes omitir a menos que lo necesites.

En términos generales, los parámetros de la plantilla se sustituyen en la plantilla después de la tokenización, pero tal como está. No se evalúan hasta que se utilicen.

Esto tiene algunas consecuencias:

  1. Si tienes una Template:Start que contiene {{mytemplate, y una Template:End que contiene |foo=bar}}, y coloca {{start}}{{end}} en una página, mytemplate no se transcluye, porque tokens como "|" no pueden ser agregados por una plantilla y mantienen su significado especial en las plantillas. Puedes usar plantillas para controlar el nombre de un parámetro o plantilla, pero no puedes dividir una llamada de plantilla entre múltiples plantillas.
  2. Eliminación de código muerto: Si haces una llamada de plantilla como {{foo|{{DISPLAYTITLE:Bar}} }}, y Plantilla:Foo no contiene {{{1}}}, entonces el DISPLAYTITLE no se utiliza, ya que solo se evalúa cuando sea necesario, y no hay parámetro para sustituirlo, por lo que nunca se evalúa. Esto suele entrar en juego cuando se utiliza Extensión:ParserFunctions , y se puede notar especialmente cuando se utiliza en combinación con la palabra mágica int:, que varía según el idioma del usuario. Esto no es perfecto y en algunos casos, incluso si no se utiliza el resultado de expandir una plantilla (porque es parte de una condición de declaración if, por ejemplo), el proceso de evaluación aún puede tener efectos secundarios. Por ejemplo, cualquier enlace producido u otras plantillas utilizadas se agregarán a Special:WhatLinksHere incluso si no se muestran.

Los parámetros de plantilla son pases por valor, lo que significa que una plantilla no puede modificar sus argumentos. Los parámetros se tratan como matrices asociativas y los nombres de los parámetros se evalúan antes que los valores de los parámetros. Si el mismo nombre de parámetro se da más de una vez, ya sea como nombrado o anónimo, solo se utiliza la última instancia, y la página se agrega a Category:Pages using duplicate arguments in template calls.

Las llamadas de plantilla que inicien con la palabra mágica subst: o con safesubst: se evalúan en un primer pase que solo sucede al momento de guardar, junto a ~~~~ y enlaces que utilicen el truco de tubería. Si no se pueden evaluar durante el primer pase, se ignoran las llamadas de subst: y se tratan las safesubst: como si fueran una plantilla normal.

Muchas, pero no todas, las funciones sintácticas, etiquetas sintácticas, y páginas especiales transcluidas no se incluyen directamente como plantillas, sino que se sustituyen por un "marcador de barras". Esto significa que no puedes manipular los resultados con funciones sintácticas como padleft: o funciones similares de extensiones, ya que ven el marcador de barras en lugar del resultado de la función sintáctica.

Recursión en plantillas

Incluir una plantilla en sí misma no arrojará a MediaWiki en una recursión infinita. MediaWiki detendrá la recursión con el nombre de la plantilla en negrita. Por ejemplo, si el contenido de Plantilla:Aaaa es a {{Aaaa}} z, se mostrará "a a Template loop detected: Template:Aaaa z z".

Esta protección imposibilita una expresión de plantilla potencialmente útil en el que una plantilla auto-normalice sus propios argumentos de llamada. En este ejemplo prohibido, se puede llamar a template:d con {{d|20200311}} o {{d|y=2020|m=3|d=11}}. Si se llama de la primera manera, se recurre a sí misma con la segunda estructura de argumento (obtenida utilizando funciones sintácticas de cadena), que luego sigue una ruta de procesamiento unificado.

{{#if:{{{1|}}}|{{d|y={{#sub:{{{1}}}|0|4}}|m={{#sub:{{{1}}}|4|2}}|d={{#sub:{{{1}}}|6|2}}}}|<!-- processing path with arguments y,m,d regardless of original call pattern -->}}

Si se modifica template:d para pasar por una recursión en template:d/2 y template:d/2 es una copia manual idéntica de template:d, esta expresión funciona bien ya que la protección de autorrecursión opera dinámicamente y no estáticamente.

Una manera factible para que el software MediaWiki relaje la regla de autorrecursión sería requerir que cada llamada recursiva tenga un conteo de argumentos distinto de todas las llamadas activas anteriores, pasando por la recursión como máximo una vez y con un conteo de argumentos que no decrezca. Esto proporcionaría una fuerte garantía contra la autorrecursión infinita y al mismo tiempo permitiría expresiones útiles como la que se describe aquí de una manera flexible.

Si la ruta de procesamiento es de baja complejidad, una solución simple usando solo una plantilla es manejar cada convención de llamada en una rama if/else separada, duplicando la lógica de la ruta de procesamiento dentro de cada caso. Si la ruta de procesamiento es más compleja, cada caso de estructura de llamada puede delegarse a una plantilla de implementación con una estructura de llamada unificada que proporciona el comportamiento final de la plantilla.

Tablas en parámetros

Dado que el carácter de pleca o barra vertical (|) y el signo de igualdad (=) tienen significados diferentes en las llamadas de plantilla y en las wikitablas, para usar el marcado de tabla en el valor de un parámetro de plantilla generalmente es necesario "escapar" esos caracteres (es decir, protegerlos de la interpretación como marcado de plantilla) usando secuencias especiales:

  • La palabra mágica incorporada {{!}} proporciona una versión "escapada" de | desde MediaWiki 1.24
  • La palabra mágica incorporada {{=}} proporciona una versión "escapada" de = desde MediaWiki 1.39

Antes de la introducción de estas palabras mágicas, muchos wikis utilizaban plantillas para lograr lo mismo. En un wiki de este tipo, las palabras mágicas tienen precedencia sobre las plantillas del mismo nombre.

Tabla de ejemplo

A B C
A1 B1 C1
A2 B2 C1

Código de la tabla:

{| class=wikitable
!A!!B!!C
|-
|A1||B1||C1
|-
|A2||B2||C1
|}

Código escapado de la tabla:

{{{!}} class{{=}}wikitable
!A!!B!!C
{{!}}-
{{!}}A1{{!}}{{!}}B1{{!}}{{!}}C1
{{!}}-
{{!}}A2{{!}}{{!}}B2{{!}}{{!}}C2
{{!}}}

Ten en cuenta que la primera llave izquierda ({) se interpreta como un carácter de llave izquierda literal porque va seguida inmediatamente por la palabra mágica {{!}}. De manera similar, la última llave derecha (}) se interpreta como un carácter de llave derecha literal porque está inmediatamente precedida por la misma palabra mágica. Sin embargo, en algunos casos estos caracteres de llave causan problemas, por lo que algunos wikis también proporcionan plantillas para escapar estos caracteres:

  • la llamada de plantilla {{(}} puede proveer una versión escapada de {
  • la llamada de plantilla {{)}} puede proveer una versión escapada de }

Algunos wikis van incluso más allá y proporcionan otras plantillas convenientes como {{(!}} ({|), {{!)}} (|}), {{!!}} (||). En un wiki de este tipo, el código puede simplificarse un poco a esta forma:

{{(!}} class{{=}}wikitable
!A!!B!!C
{{!}}-
{{!}}A1{{!!}}B1{{!!}}C1
{{!}}-
{{!}}A2{{!!}}B2{{!!}}C2
{{!)}}

Controlar la inclusión de plantilla

Por defecto, el contenido de una plantilla se muestra en su totalidad, tanto cuando se ve directamente como cuando se incluye en otra página. La página de la plantilla, cuando se visualiza directamente, aparece exactamente como se mostraría la plantilla sin ningún parámetro. Si la plantilla requiere parámetros para funcionar correctamente, esto dará como resultado una sintaxis de wikitexto sin formato o errores como resultado de su falta. Por ejemplo:

  • Si un parámetro no tiene un valor predeterminado, se muestra de forma literal como el texto {{{1}}}, lo que indica que la plantilla necesita un parámetro.
  • Si un parámetro tiene un valor predeterminado vacío (se escribe como {{{1|}}}), no muestra nada, lo que logra el efecto deseado pero carece de claridad para la autodocumentación. Usar un valor predeterminado no vacío como {{{1|imagen}}} podría aclarar la función de un parámetro, especialmente para plantillas que involucren imágenes.
  • Si se introduce un parámetro sin un valor predeterminado a la función sintáctica #expr, aparece un mensaje de error: "Error de expresión: carácter de puntuación no reconocido '{'".
  • Si una plantilla crea una tabla, es útil que la página de la plantilla muestre la estructura de la tabla en lugar del wikitexto utilizado para crearla. Para hacer esto, la sintaxis de la tabla no está encerrada en etiquetas y cada elemento de la tabla incluye ambas partes ‎<noinclude>...‎</noinclude> y ‎<includeonly>...‎</includeonly> cuando sea necesario.

Sin embargo, puedes controlar qué partes de una plantilla se verán e incluirán mediante el uso de las etiquetas ‎<noinclude>, ‎<includeonly> y ‎<onlyinclude>.

Todo lo que esté entre ‎<noinclude> y ‎</noinclude> se verá solo cuando se visualice directamente la página de la plantilla, pero no cuando esté incluido en otra página. Esto resulta útil cuando desees incluir texto o código en una plantilla que no desees propagar a ninguna página que la incluya, como por ejemplo:

De la misma manera, todo lo que esté entre ‎<includeonly> y ‎</includeonly> se procesará y mostrará solo cuando se incluya la página, pero no cuando se vea directamente la página de la plantilla, y es útil en situaciones como:

  • Categorizar páginas que incluyan la plantilla. Nota: al cambiar las categorías aplicadas por una plantilla de esta manera, la categorización de las páginas que incluyen esa plantilla puede no actualizarse hasta algún tiempo después: esto lo maneja la cola de trabajos . Para forzar la recategorización de una página en particular, abre el editor en esa página y guárdala sin cambios.
  • Asegurarse de que el código de la plantilla no se ejecute al visualizar la página de la plantilla. Normalmente, esto se debe a que espera parámetros y su ejecución sin parámetros tiene un resultado no deseado.

Todo lo que esté fuera de ‎<noinclude> e ‎<includeonly> se procesa y muestra normalmente; es decir, tanto cuando se ve la página de la plantilla directamente como cuando la plantilla se incluye en otra página. El enfoque se centra en lo que está dentro de estas dos etiquetas.

Todo lo que esté fuera de las etiquetas ‎<onlyinclude> se descartará en la transclusión. Incluso las secciones etiquetadas como includeonly se descartan en la transclusión a menos que también estén etiquetadas como onlyinclude. El enfoque se centra en lo que está dentro de estas etiqueta.

Por ejemplo, si una página como Ayuda:Plantillas/demo de onlyinclude tiene el wikitexto:

abc<onlyinclude>def</onlyinclude>ghi<includeonly>jkl</includeonly>

El resultado de transcluirlo es def.

También es posible anidar estas etiquetas.

Las tres etiquetas de transclusión parcial permiten todas las combinaciones posibles de lo que se procesa y muestra. Los comentarios también desempeñan un papel. Las etiquetas de inclusión se respetan cuando se usa {{subst:templatename}}, pero no se respetan cuando se usa {{msgnw:templatename}} ya que muestra el wikitexto sin formato, sin ningún procesamiento.

Transclusión de sección

Para transcluir diferentes secciones de una plantilla en diferentes páginas, puedes envolver el contenido en etiquetas onlyinclude y usar una declaración if en los parámetros para seleccionar qué sección.

Considera "Template:Example" con este wikitexto:

== Section 1 ==
{{#ifeq:{{{1|1}}}|1|
Content of section one.
}}
{{#ifeq:{{{1|2}}}|2|
== Section 2 ==
Content of section two.
}}

Esto mostrará ambas secciones en la página de ejemplo y permitirá que otras páginas transcluyan la primera sección con {{example|1}} y la segunda sección con {{example|2}}.

Otro enfoque es utilizar la sintaxis literal de parámetros en su lugar:

{{{section1|
== Section 1 ==
Content of section one.
}}}
{{{section2|
== Section 2 ==
Content of section two.
}}}

Transcluye la primera sección con {{example|section2=}}, y la segunda sección con {{example|section1=}}. Si no se utiliza ningún parámetro, se mostrarán ambas secciones.

Un tercer enfoque es utilizar Labeled Section Transclusion (Transclusión de sección etiquetada).

Organizar plantillas

Para que las plantillas sean efectivas, los usuarios necesitan encontrarlas y averiguar cómo utilizarlas.

Para encontrarlas, los usuarios pueden:

  1. Hacer clic en Páginas especiales > Todas las páginas
  2. En la lista Espacio de nombres:, elegir Plantilla y hacer clic en Mostrar.

Para brindar información de uso, incluye un ejemplo como este en la página de plantilla:

<noinclude>
== Uso ==
Darle la bienvenida a usuarios:
{{Thankyou|razón=tu razón|firma=tu firma}}
</noinclude>

Luego, un editor puede simplemente copiar y pegar el ejemplo para usar la plantilla.

Al editar una página, aparece una lista de todas las plantillas utilizadas debajo del formulario de edición, en una sección contraíble titulada "Plantillas usadas en esta página:" (también llamada "Plantillas usadas en esta previsualización:" o "Plantillas usadas en esta sección:" según el contexto). Esta lista proporciona un enlace conveniente a la página de la plantilla, así como información sobre su estado de protección. Las plantillas redirigidas se muestran en cursiva, con el objetivo de redirección añadido como un elemento de lista separado.

Enlazar a una plantilla

Se puede enlazar una página de plantilla como cualquier otra página wiki. Por ejemplo, el enlace Template:Navbar se genera utilizando el código wiki [[Template:Navbar]].

En muchos wikis, se puede utilizar Template:Tl para proporcionar un enlace a una plantilla con un formato que muestre el código wiki "entre llaves dobles" necesario para transcluir la plantilla sin realizar realmente la transclusión. Por ejemplo, el código {{tl|Navbar}} se puede utilizar para crear el enlace {{Navbar }}.

Esta construcción se utiliza comúnmente cuando se hace referencia a plantillas en la documentación de plantilla, en las páginas de ayuda y en las páginas de discusión. El mismo efecto se puede lograr usando {{[[Template:Navbar|Navbar]]}}, pero el enfoque de {{Tl }} implica escribir menos. En cualquier wiki, la plantilla Tl, si existe, puede o no representar el texto en un elemento "código" o como tipo monoespaciado. Si no (como en este wiki), otra plantilla llamada de forma similar puede hacerlo. Consulte, por ejemplo, la sección "Véase también" de nuestra documentación de Template:Tl.

Nombrar plantillas

El nombre de una plantilla distingue entre mayúsculas y minúsculas, excluyendo el primer carácter.

Utiliza redirecciones para formas alternativas de escribir su nombre. Por ejemplo, si una plantilla se llama "AdminAbbr", puedes crear una redirección llamada "Adminabbr". De esta manera, la plantilla puede ser llamada con {{AdminAbbr}} o {{adminabbr}}. Si un editor prefiere una combinación de mayúsculas y minúsculas para mayor claridad, puede usar funciones como lc o uc. Por ejemplo, en lugar de {{CURRENTINTERNETTIME}}, podría usar {{ {{uc:CurrentInternetTime}} }}

Debido a que los nombres de plantilla se interpretan de la misma manera que los nombres de otras páginas, los guiones bajos se reemplazan con espacios y cualquier texto después de un signo numérico (lo que sería un ancla en un enlace estándar) se ignora.

Un guion bajo _ puede ser una alternativa a un espacio en blanco.

Usos posibles de plantillas

Las plantillas se pueden utilizar para cualquier situación en la uno quiera que dos o más páginas contengan contenido idéntico o similar que se edite en conjunto en lugar de hacerlo de manera independiente. Se pueden utilizar para:

  • Proporcionar elementos estructurados en muchas páginas, como infoboxes, plantillas de mantenimiento, cuadros de navegación, etc.
  • Realizar cálculos utilizados como herramienta de programación en varias páginas, como w:Template:Sum.
  • Crear páginas compuestas que muestren el contenido de varias páginas existentes juntas, como w:WP:Village pump (all) que incluye contenido de cada sección. El contenido de estas páginas se puede mostrar individualmente o en conjunto, pero el historial de revisiones, la lista de seguimiento, etc. solo detectarán los cambios en las páginas transcluidas y el wikitexto sin formato de la página compuesta en sí, no los cambios implícitos en la página compuesta.
  • Compartir contenido entre unas páginas relacionadas. Por ejemplo, la lista en Ayuda:Preferencias#Funcionalidades beta está duplicada en Funcionalidades beta#Funcionalidades beta actuales. Si bien en MediaWiki.org se creó usando Extension:LabeledSectionTransclusion , se podría haber hecho utilizando una plantilla.
  • Almacenar contenido referenciado varias veces en la misma página, de modo que solo sea necesario escribirlo y calcularlo una vez. Por ejemplo, w:Template:Cite Monumentenregister/URL es llamada dos veces por w:Template:Cite Monumentenregister en dos lugares diferentes, y utilizar otra plantilla significa que el patrón de URL solo debe escribirse una vez en la plantilla base.
  • Usar plantillas como un elemento de programación para generar un bucle: si Plantilla:A llama a Plantilla:B 10 veces con diferentes parámetros, entonces eso simula de manera tosca un bucle for. Si Plantilla:B llama a Plantilla:C 10 veces, entonces tienes un bucle anidado de 100 llamadas de Plantilla:C. Pero ten en cuenta que es fácil encontrarse con los límites de plantilla cuando se utilicen plantillas como construcciones de programación avanzada, y utilizar Scribunto es generalmente más claro y fácil de seguir.

Copiar de un wiki a otro

Es posible, si la configuración del wiki lo permite , transcluir plantillas de otros wikis. Esta configuración está desactivada en los wikis de Wikimedia. De lo contrario, deberás copiar manualmente la plantilla y sus dependencias del wiki de origen al wiki de destino para usarla.

Las plantillas a menudo requieren CSS u otras plantillas, por lo que los usuarios frecuentemente tienen problemas al copiar plantillas de un wiki a otro. Los pasos a continuación deberían funcionar para la mayoría de las plantillas.

Código de MediaWiki

Si tienes permisos de importación (específicamente importupload) en el nuevo wiki:

  1. Ve a Special:Export en el wiki original y descarga un archivo .xml con el historial completo de todas las plantillas necesarias, de la siguiente manera:
    • Ingresa el nombre de la plantilla en el cuadro de texto grande, por ejemplo, "Plantilla:Bienvenido". Presta atención a las mayúsculas y a los caracteres especiales: si el nombre de la plantilla no es exactamente correcto, la exportación puede realizarse de todos modos, pero el archivo .xml no tendrá los datos esperados.
    • Marca la opción "Incluir plantillas".
    • Marca la opción "Ha'nhe hun ti' chpich'laxi, mach shuniloj:".
    • Haz clic en "Exportar".
  2. Ve a Especial:Importar en el nuevo wiki y sube el archivo .xml.

Si no tienes permisos de importación en el nuevo wiki:

  1. Ve a la plantilla que desees copiar del wiki original. Ve a la página de edición y copia todo el wikitexto.
  2. En el nuevo wiki, ve a la página con el mismo nombre que la plantilla que copiaste. Haz clic en crear/editar y pega el wikitexto que copiaste. En el resumen de edición de cada plantilla, incluye un enlace a la página original para atribuir la autoría.
  3. De vuelta en el wiki original, en la ventana de edición, debajo del cuadro de edición, mira la lista de "Plantillas utilizadas en esta página". Para cada plantilla que se muestre, sigue estas instrucciones. Haz lo mismo con cualquier plantilla utilizada por cualquiera de estas plantillas, y así sucesivamente.

Esto copiará todo el código necesario, y será suficiente para algunas plantillas. Ten en cuenta que solo los elementos de página analizados en la representación de la página se exportan, por lo tanto, las subpáginas de documentación no se exportan como parte de este proceso. Si no funciona, también verifica los enlaces rojos que aparecen en "Páginas transcluidas a la versión actual de esta página:", debajo del cuadro de edición. Si hay alguno, repite los pasos anteriores para estos también y copia el código en los módulos.

Después de importar con éxito la plantilla y todas las plantillas enlazadas desde el otro wiki, edítela para cambiar sus personalizaciones y adaptarlas a tu wiki. Por ejemplo, para cambiar un logo, eliminar categorías redundantes o enlaces rojos.

Extensiones

Una extensión que se utiliza a menudo en plantillas es ParserFunctions. Visita la página Extensión:ParserFunctions y verifica si alguna de las funciones enumeradas allí se utiliza en las plantillas que has copiado. Si es así, tendrás que instalar la extensión ParserFunctions . Para instalarlo, necesitarás acceso de administrador del sistema al servidor de tu instalación de MediaWiki.

Otra dependencia que se puede utilizar en plantillas, especialmente las de Wikipedia, es Lua. Tener {{#invoke: }} en el código de la plantilla es una buena señal para ello. En caso de que se use, necesitas instalar la extensión Scribunto y también se requiere acceso de administrador del sistema. Consulta esa página para obtener más instrucciones sobre cómo instalar y utilizar la extensión.

Código CSS y JavaScript

Además del código de MediaWiki, muchas plantillas utilizan CSS y algunas dependen de JavaScript para funcionar correctamente. Si las plantillas copiadas no funcionan como se espera, esta puede ser la causa. Para copiar el CSS y el JavaScript necesarios a tu wiki, normalmente necesitarás tener permisos de administrador, ya que estarás editando mensajes del sistema en el espacio de nombres "MediaWiki:".

  1. Busca el uso de clases CSS (texto como class="foobar") en el texto de la plantilla. Si esas clases aparecen en MediaWiki:Common.css o MediaWiki:Vector.css en el wiki original, copia esas clases en MediaWiki:Common.css en el nuevo wiki y verifica si la plantilla ahora está bien.
  2. Si la plantilla copiada sigue sin funcionar como se esperaba, comprueba si hay código en MediaWiki:Common.js o MediaWiki:Vector.js en el wiki original. Si es así, puedes intentar copiarlo en MediaWiki:Common.js en el nuevo wiki. Normalmente, es una buena idea copiar solo código de fuentes de confianza y examinar el código para identificar y seleccionar las partes relevantes. Puedes encontrar comentarios que puedan servir como pistas para identificar la funcionalidad de cada parte.

Redirección

Si una página utiliza una redirección como plantilla, la redirección se resuelve antes de procesar la plantilla y se utiliza el destino en su lugar. Esto no funcionará si el destino no existe (una redirección rota) o es en sí mismo una redirección (una redirección doble).

Una página que simplemente incluye otra página como plantilla puede parecer una redirección, pero existen varias diferencias entre ellas:

  • El encabezado del resultado muestra el título de la página de la que proviene.
  • No se muestra ningún mensaje "Redirigido desde".
  • Botones como editar, vigilar, discusión, historial, "lo que enlaza aquí" y "última modificación" apuntan a la página de referencia. Para acceder a la página de destino, utiliza un enlace de edición de sección y navega desde allí.
  • A menos que se utilicen las etiquetas includeonly y/o noinclude, la página de referencia comparte las mismas categorías que la página de destino.
  • Las "redirecciones dobles" funcionan cuando uno o ambos son este tipo de pseudo-redirección.
La incrustación funciona en páginas que admiten redirecciones y no funciona en páginas que no las admitan.

Funciones sintácticas

Página principal: Help:Parser functions

MediaWiki también soporta funciones sintácticas, que funcionan de manera similar a las plantillas pero siguen una sintaxis ligeramente diferente:

  • Las funciones sintácticas utilizan un ":" en lugar del "|" inicial.
  • Una página de edición no muestra las funciones sintácticas utilizadas en esa página.
  • No existe una función "Lo que enlaza aquí" para que las funciones sintácticas identifiquen las páginas en las que se utilizan.
  • Las plantillas de funciones sintácticas generalmente no aceptan parámetros nombrados, por lo que los signos iguales generalmente no tienen un significado especial. Por ejemplo:
{{ #if: not blank | x=abc }} gives x=abc

Véase también

Uso general de plantillas

Construcciones especiales utilizadas en plantillas

Información en general

Enlaces externos