Ayuda: Plantilla


Una plantilla es una página de Wikipedia creada para ser incluida en otras páginas. Las plantillas suelen contener material repetitivo que puede necesitar aparecer en cualquier número de artículos o páginas. Se utilizan comúnmente para mensajes repetitivos , advertencias o avisos estandarizados, cuadros de información , cuadros de navegación y propósitos similares.

El método de inclusión más común se llama transclusión , donde el wikitexto de la página de destino contiene una referencia a la plantilla, utilizando la sintaxis. Otro método es la sustitución , donde el contenido de la plantilla se copia en el wikitexto de la página de destino, solo una vez, cuando se guarda.{{Template name}}

Ayuda: una guía rápida de plantillas ofrece una breve introducción al tema. Existe además la ayuda de MediaWiki y Wikimedia en mw: Ayuda: Plantillas , m: Ayuda: Plantilla y m: Ayuda: Plantillas avanzadas .

Para incluir el nombre completo real de la plantilla como texto (incluidas las llaves que la rodean) en un artículo de Wikipedia, aplique la plantilla de enlace de la plantilla . La principal motivación para hacer esto es la instrucción y la documentación. Un pequeño ejemplo es el código:

{{tl|foo}}
genera
{{ foo }}

Una descripción básica de cómo funcionan las plantillas (video de 8 minutos)

La mayoría de las plantillas son páginas en el espacio de nombres Plantilla , lo que significa que tienen títulos con el formato "Plantilla: XXXX ". Sin embargo, es posible transcluir y sustituir desde cualquier espacio de nombres, [a], por lo que algunas páginas de plantilla se colocan en otros espacios de nombres, como el espacio de nombres de usuario . Las páginas de plantilla tienen páginas de discusión asociadas .

Las plantillas pueden contener cualquier wikitexto deseado , incluidas las llamadas a otras plantillas. Tienen algunas capacidades de programación limitadas: valores personalizables (llamados parámetros ); cálculo y ramificaciones (usando funciones de analizador ); y acceso a variables específicas de wiki ( palabras mágicas ), como fechas, horas y nombres de páginas. También pueden contener etiquetas que definen qué partes del wikitexto se incluirán cuando la plantilla se transcluya o sustituya. Esto significa que la apariencia de la página de la plantilla en sí no necesita ser la misma que la del contenido transcluido (por ejemplo, puede contener documentación, categorías, etc. para la plantilla).

Cómo hacerlo: Para convertir una plantilla en un artículo o página, escriba el wikitexto en el lugar donde aparecerá la plantilla. La primera letra puede ser indistintamente minúscula o mayúscula.{{Template name}}

El prefijo Template:antes del nombre de la plantilla es el predeterminado y no es necesario incluirlo. Sin embargo, para las plantillas almacenadas en otros espacios de nombres User:, se debe especificar el prefijo, como por ejemplo . Para transcluir una página en el espacio principal , preceda su título con dos puntos, como .{{:Page name}}

Nota: Intentar transcluir una plantilla que no existe produce un enlace rojo , al igual que un enlace a cualquier otra página inexistente. Seguir el enlace le permite a uno crear esa plantilla en particular. No es posible transcluir páginas entre proyectos (como Wikipedias en diferentes idiomas o MediaWiki). Para usar una plantilla en otro proyecto de idioma, se debe crear una copia de la plantilla en ese proyecto.

Parámetros

Atajos
  • H: PARÁMETRO
  • WP: PARÁMETRO

La sintaxis de transclusión básica proporcionada anteriormente se puede ampliar mediante la adición de parámetros , que se utilizan para controlar la salida de la plantilla. La sintaxis para esto es dónde está el nombre de la plantilla, y cada uno puede contener solo un valor (estos se denominan parámetros sin nombre ) o tener la forma ( parámetros con nombre ). La primera, segunda, se les dará terceros, etc. parámetros sin nombre los nombres , , , etc.{{Template name|parameter|parameter|...}}Template nameparameter name=value 123

Espacios en blanco (espacios, tabulaciones, retornos) se eliminan de los principios y finales de nombre nombres y valores de los parámetros, pero no desde el medio: por lo tanto {{ ... | myparam = this is a test }}tiene el mismo efecto que {{ ... |myparam=this is a test}}. Esto no se aplica a los parámetros sin nombre , donde se conservan todos los espacios en blanco.

Qué parámetros (si los hay) pueden o deben pasarse a una plantilla y cómo se nombrarán depende de la codificación de esa plantilla. Los parámetros con nombre se pueden definir en cualquier orden. Se ignorarán los parámetros superfluos o con nombres incorrectos; A los parámetros no definidos se les asignarán valores predeterminados. Si un parámetro se define más de una vez, se aplica el último valor.

El valor de un parámetro puede ser la cadena vacía, como cuando la tubería o el signo igual es seguido inmediatamente por la siguiente tubería o las llaves de cierre. Esto es diferente de omitir el parámetro por completo, lo que lo deja indefinido, aunque las plantillas a menudo se codifican para que se comporten de la misma manera en ambos casos.

Los parámetros se pueden especificar (y no harán nada) incluso si no están representados en el código de la plantilla. Por ejemplo, |reason=se usa con frecuencia como un pseudoparámetro para explicar brevemente en el wikisource por qué se colocó la plantilla. [b] Algunas plantillas llaman al módulo: compruebe si hay parámetros desconocidos para advertir al editor si se está utilizando un parámetro que no se tiene en cuenta en el código de la plantilla; esto se usa principalmente para infoboxes y otras plantillas con una gran cantidad de parámetros complicados, donde la presencia de uno desconocido suele ser un error involuntario. Si actualiza dicha plantilla para incluir un nuevo parámetro, su llamada al módulo también debe actualizarse para incluir el nuevo parámetro.

Vocación

Usar una plantilla es muy parecido a llamar a una función en un lenguaje de programación: llámala y devuelve un valor (la salida ). Al igual que las funciones, algunas plantillas aceptan parámetros que cambian la salida.

En MediaWiki , el software wiki que usa Wikipedia, las variables tienen un significado más específico que las distingue de las plantillas, pero ambas se identifican con llaves dobles {{ }}y ambas devuelven un valor.

Mientras que los nombres de las variables de MediaWiki están todos en mayúsculas, los nombres de las plantillas tienen las mismas características básicas y limitaciones que todos los nombres de páginas : distinguen entre mayúsculas y minúsculas (excepto el primer carácter); los guiones bajos se analizan como espacios; y no pueden contener ninguno de estos caracteres: # < > [ ] | { }. Esto se debe a que están reservados para el marcado wiki y HTML .

El signo de número # se denomina identificador de fragmento porque denota un fragmento o sección de un documento (como una sección en un artículo de Wikipedia). Aunque se puede usar para vincular a una sección de una página de plantilla (como Plantilla: Ejemplo de # de portal ), no hay razón para poner un identificador de fragmento o un nombre de fragmento en una referencia de plantilla. En , por ejemplo, la cadena no tiene ningún propósito y, por lo tanto, se ignora.{{Portal#Location|Books}}#Location

Sustitución

Cuando se sustituye una plantilla, su contenido está codificado en la página en lugar de transcluirse . Para saber cómo y cuándo sustituir una plantilla, consulte Ayuda: Sustitución .

Nota: Si desea experimentar con cualquiera de estos, utilice la plantilla de sandbox , Special: ExpandTemplates o su página de usuario o sandbox.

Se puede encontrar un ejemplo de una plantilla muy simple en Plantilla: Lambda , que se expande para colocar el símbolo lambda (λ) en ese punto del texto. Un programador diría que la plantilla devuelve el símbolo lambda (λ).

Haga clic en Plantilla: Lambda , luego haga clic en la pestaña "Editar fuente" para ver el código de la plantilla (su wikitexto). La parte "activa" de ese código, llamada expansión de la plantilla, es la palabra única λ. [c] El resto del wikitexto se incluye entre etiquetas para que se muestre en la página de la plantilla, pero no se mostrará cuando la plantilla se use (o se llame) en otra página.<noinclude>

Para transferir Plantilla: Lambda a otra página (es decir, para usarla en otra página), escriba (o , el caso de la primera letra no es significativo) en el wikitexto de la página de destino y presione . La página se mostrará con la llamada de plantilla reemplazada por la expansión de la plantilla, como si el wikitexto estuviera realmente contenido en ese punto. Por lo tanto, la página mostrada contendrá el texto "λ".{{lambda}}{{Lambda}}Show previewλ

Por ejemplo, escriba y verá "La undécima letra del alfabeto griego es la lambda (𝜆)" al obtener una vista previa de la página o después de guardar el cambio. Puede utilizar plantillas sin conocer los detalles de su código; solo necesita recordar qué resultado producen, que generalmente se describe en la página de la plantilla.The 11th letter of the Greek alphabet is the lambda ({{lambda}})

Otra forma de utilizar esta plantilla es sustituirla . Si escribe y obtiene una vista previa o guarda la página, verá nuevamente "La undécima letra del alfabeto griego es la lambda (λ)". Si vuelve a mirar el wikitexto guardado, [d] sin embargo, verá que las llamadas de la plantilla realmente fueron reemplazadas por la expansión de la plantilla cuando guardó la página. El vínculo entre el texto de salida y la plantilla ahora está roto, y la salida no se verá afectada por cambios futuros en la plantilla (como sería en el caso de la transclusión).The 11th letter of the Greek alphabet is the lambda ({{subst:lambda}})

Ejemplos con parámetros

Un ejemplo de una plantilla que toma parámetros es la plantilla . Intente escribir en la caja de arena; producirá el siguiente texto:{{about}}{{about|how to use templates|how to use modules|Help:Module}}

La plantilla usa tres parámetros sin nombre (también llamados parámetros posicionales) en el ejemplo anterior, pero la misma plantilla también se puede usar con diferentes números de parámetros para dar resultados ligeramente diferentes, como se explica en la documentación de la plantilla . Por ejemplo ,. Tenga en cuenta el uso de un parámetro vacío; en este caso, los conductos consecutivos significan que el primer parámetro que se "pasó" a la plantilla es una cadena vacía, que en esta plantilla hará que se omita la oración inicial "acerca de". Esto produce:{{about}}{{about||how to use modules|Help:Module}}

Otras plantillas, particularmente las más complejas, toman parámetros con nombre o una mezcla de nombres con y sin nombre. Un ejemplo simple es Plantilla: matriz de pagos , que se utiliza para generar una cuadrícula de 2 por 2. Por ejemplo:

Consulte la página de la plantilla para conocer más posibilidades. Observe que la plantilla se usa aquí sin definir todos sus parámetros posibles; los parámetros no definidos reciben valores predeterminados.

Los espacios alrededor de los signos de igual y antes y después de los parámetros se usan solo para mayor claridad; no son necesarios y se ignoran cuando se evalúa la plantilla (aunque este no es el caso con los parámetros sin nombre). Sin embargo, los nombres de los parámetros distinguen completamente entre mayúsculas y minúsculas; por ejemplo, no es posible reemplazar DRcon dro dRen el ejemplo anterior. Los parámetros con nombres que no son utilizados por la plantilla simplemente se ignoran.

Al examinar el código fuente de la plantilla, se muestra el marcado de tabla estándar con algunas entidades de corchetes triples adicionales que representan los parámetros:

{| id = "Matriz de pagos" style = "fondo: blanco; flotante: {{{ Flotante | derecha }}} ; claro: derecha; alineación de texto: centro;" align = {{{ Float | right }}} espacio de celdas = 0 relleno de celdas = 8 ancho = {{{ Ancho | 225 }}}| -| estilo = "ancho: 33%;" | | estilo = "ancho: 33%; borde inferior: negro sólido 1px;" | {{{ 2L | Izquierda }}}
| estilo = "ancho: 33%; borde inferior: negro sólido 1px;" | {{{ 2R | Derecha }}}| -| style = "border-right: negro sólido 1px; text-align: right;" | {{{ 1U | Arriba }}}
| estilo = "borde derecho: negro sólido 1 px; borde inferior: negro sólido 1 px; fondo: {{{ ULc | blanco }}} ; tamaño de fuente: 120%;" | {{{ UL | 0, 0 }}}
| style = "borde derecho: negro sólido 1 px; borde inferior: negro sólido 1 px; fondo: {{{ URc | blanco }}} ; tamaño de fuente: 120%; "| {{{ UR | 0, 0 }}}| -| style = "border-right: negro sólido 1px; text-align: right;" | {{{ 1D | Abajo }}}
| estilo = "borde derecho: negro sólido 1 px; borde inferior: negro sólido 1 px; fondo: {{{ DLc | blanco }}} ; tamaño de fuente: 120%;" | {{{ DL | 0, 0 }}}
| style = "borde derecho: negro sólido 1 px; borde inferior: negro sólido 1 px; fondo: {{{ DRc | blanco }}} ; tamaño de fuente: 120%; "| {{{ DR | 0, 0 }}}| -| style = "tamaño de fuente: 90%;" colspan = 3 | '' {{{ Nombre | {{PAGENAME }}} }} ''|}

La entidad le indica a la plantilla que use el parámetro nombrado o el texto si el parámetro no está presente en la llamada.{{{2L|Left}}}2LLeft

Puede que valga la pena tener en cuenta los siguientes puntos al utilizar plantillas:

  • Un parámetro sin nombre no puede contener un signo igual ordinario, ya que esto se interpretaría como la activación de un parámetro con nombre. [e] Para pasar un signo igual en un parámetro sin nombre (por ejemplo, en una URL con pares atributo-valor ), reemplace el signo igual con la plantilla especial , que devuelve un signo igual que no se interpretará. Otro método consiste en reemplazar el parámetro sin nombre (y cualquier parámetro sin nombre subsiguiente) con parámetros con nombre; el primer parámetro sin nombre es equivalente a un parámetro con nombre y así sucesivamente. Para llamar a la plantilla con el valor literal del primer parámetro, escriba o .{{=}}|1={{done}}a=b{{done|a{{=}}b}}{{done|1=a=b}}
  • Del mismo modo, no es posible utilizar un carácter de barra vertical común |en los parámetros de la plantilla, ya que se interpretará como un separador. [f] Esta vez, el problema se puede resolver usando la palabra mágica en lugar de la tubería o, si la tubería no está pensada para ser analizada en un nivel superior, usando la entidad HTML . Alternativamente, para incrustar wikitables en plantillas, puede usar para evitar el uso excesivo .{{!}} |{{Wikitable}}{{!}}
  • Recuerde que los caracteres de espacio en blanco (espacios, tabulaciones, retornos de carro y avances de línea) no se eliminan automáticamente del inicio y el final de los parámetros sin nombre, a diferencia de los parámetros con nombre. La inclusión de dichos caracteres (o cualquier otro carácter no visible en cualquier parámetro) puede, en algunos casos, afectar el comportamiento de la plantilla de formas inesperadas. (Los diseñadores de plantillas pueden usar para eliminar espacios en blanco no deseados en parámetros sin nombre).{{Strip whitespace}}
  • En la documentación y las discusiones, a menudo es conveniente poder producir la sintaxis de llamada de la plantilla con un enlace a la plantilla en cuestión, pero sin realmente llamar a la plantilla. Esto se puede hacer fácilmente usando la plantilla ( la plantilla " t emplate l ink"). Por ejemplo, produce {{ Example }}. Hay muchas otras plantillas de enlace de plantillas disponibles con diferentes funcionalidades.{{tl}}{{tl|Example}}
  • Cuando se cambia una plantilla (cuando se edita la plantilla o una de sus subplantillas), el cambio se reflejará en todas las páginas en las que se transcluya la plantilla. Sin embargo, es posible que el cambio no se haga visible en todas las páginas inmediatamente; una versión previamente almacenada en caché de una página, basada en la versión anterior de la plantilla, puede continuar mostrándose durante algún tiempo. Utilice la función de purga para forzar la visualización de una página con las últimas versiones de las plantillas, incluso en la propia página de la plantilla, si contiene ejemplos de uso.
  • Cuando visualice versiones antiguas de páginas, recuerde que las plantillas se incorporarán como están ahora, no necesariamente como estaban cuando la versión antigua de la página estaba activa.
  • Para enumerar todas las páginas en las que se incluye una plantilla, utilice los enlaces Qué aquí en la página de la plantilla. Esto no incluirá las páginas en las que se haya sustituido la plantilla.
  • Para obtener una lista de plantillas incluidas en una página, haga clic en "Editar" y busque la lista debajo de la ventana de edición. Esta lista también incluye las subplantillas utilizadas por las plantillas que se trasladan directamente. Para obtener dicha lista para una sección de página, una versión antigua de la página, [g] o su versión recién editada antes de guardar, haga clic Show previewen la página de edición correspondiente.
  • Existen límites para el número y la complejidad de las plantillas que puede tener un artículo. Consulte la sección " § Expandir límites " para obtener ayuda para resolver este problema.
  • Si desea que la plantilla deje una marca de tiempo o una firma , puede escribir ~~~~~, pero esto solo funcionará si sustituye la plantilla. Si lo transcluye, obtendrá ~~~~~.
  • Para mejorar la legibilidad, generalmente a los programadores les gusta dividir el código con nuevas líneas y sangrarlo. Desafortunadamente, el software MediaWiki no permite esta funcionalidad; en muchos casos, el software trata estas nuevas líneas como contenido. Una posible solución es agregar después de cada carácter de nueva línea , lo que produce un comentario HTML .

Las plantillas se crean y editan de la misma manera que cualquier otra página: elija un nombre apropiado, navegue a esa página, luego haga clic en la pestaña "Editar" o cree una nueva página según sea necesario. Como se mencionó anteriormente, las plantillas normalmente se colocan en el espacio de nombres de Plantillas , aunque las plantillas diseñadas para su uso personal o para experimentación se pueden crear en su propio espacio de usuario . Todo lo que pueda incluirse en una página o artículo normal se puede incluir en una plantilla, incluidas otras plantillas (llamadas subplantillas ). Las plantillas suelen hacer uso de funciones de programación (parámetros, funciones del analizador y otras palabras mágicas) que permiten que el contenido extraído varíe según el contexto. También hay etiquetas especiales para controlar qué información se transfiere y cuál no.

Antes de crear una plantilla, haga una búsqueda rápida de las plantillas existentes (por ejemplo, explorando Categoría: plantillas de Wikipedia ) para ver si ya hay una plantilla que hace lo que desea o una plantilla similar cuyo código se puede copiar y modificar (o dejar en lugar y ampliado). Busque plantillas genéricas en las que se pueda basar la nueva plantilla; por ejemplo, las plantillas de navbox se pueden crear fácilmente llamando a la plantilla genérica : Navbox .

No existe una regla estricta sobre qué nombre elegir para una plantilla; hágalo corto pero razonablemente descriptivo. Si existen plantillas similares, intente seguir un patrón de nomenclatura coherente. Las plantillas se pueden renombrar sin romper las transclusiones existentes (lo que se llama rotura ), siempre que se deje una redirección al nuevo nombre de la plantilla.

Tenga mucho cuidado al editar plantillas existentes: los cambios realizados pueden afectar a un gran número de páginas, a menudo de formas inesperadas. Por esta razón, muchas plantillas de uso intensivo están protegidas contra la edición, excepto por administradores y editores de plantillas ; otros editores pueden proponer cambios en la página de discusión. Algunas plantillas ofrecen una caja de arena y casos de prueba para experimentar.

Para proponer la eliminación o fusión de plantillas no utilizadas o inapropiadas o plantillas que se pueden fusionar fácilmente, vaya a Plantillas para discusión (TfD).

Manejo de parámetros

Los valores de los parámetros que se pueden alimentar a una plantilla están representados en el código de la plantilla por elementos encerrados entre llaves triples :

  • El código {{{xxx}}}será reemplazado por el valor del parámetro nombrado xxx. estos son conocidos como parámetro con nombre, s .
  • Los códigos {{{1}}}, {{{2}}}y así sucesivamente serán reemplazados por el primero, segundo, y así sucesivamente parámetro sin nombre (o el valor de un parámetro con nombre 1, 2, etc.); éstos se conocen como posicional parámetro s .

Si a un parámetro no se le asigna un valor, no se realizará ninguna sustitución; esto significa que si no se pasa ningún valor para el parámetro |xxx=, el valor de la expresión {{{xxx}}}dentro de la plantilla será literalmente {{{xxx}}} , no el 'espacio en blanco' que puede haber esperado. Se puede lograr un comportamiento más intuitivo especificando valores de parámetros predeterminados. Esto se hace con la sintaxis de tubería : {{{xxx|dflt}}}especifica el valor predeterminado dfltpara el parámetro con nombre |xxx=y {{{1|dflt}}}especifica el valor predeterminado dfltpara el primer parámetro sin nombre. La mayoría de las veces, se utiliza para especificar valores predeterminados nulos, como {{{1|}}}o {{{xxx|}}}.

Los alias de parámetros son un caso especial de valores predeterminados. Por ejemplo, si los parámetros |1=, |text=y |message=son nombres para el mismo parámetro, entonces se {{{message|{{{text|{{{1|}}}}}}}}}podría usar wikitexto . Si se dan más de uno de esos parámetros, entonces messagetendrá prioridad, seguido de text, y finalmente por el primer parámetro sin nombre. Es decir, si se pasan los parámetros a una plantilla que contiene ese wikitexto |message=A|text=B, el wikitexto se expandirá a A.

Debido a los múltiples usos de la sintaxis de llaves dobles y llaves triples, las expresiones a veces pueden ser ambiguas. Puede ser útil o necesario incluir espacios para resolver tal ambigüedad. Por ejemplo, {{ {{{xxx}}} }}o {{{ {{xxx}} }}}, en lugar de escribir cinco llaves consecutivas, puede ser más legible por humanos. Sin embargo, tenga cuidado con los espacios en blanco no deseados que aparecen en las expansiones de plantillas.

Caso especial: parámetros dentro de una etiqueta de apertura de estilo XML

Los parámetros no se expanden cuando se envuelven en etiquetas. Tampoco se expanden si se colocan dentro de la etiqueta de apertura de estilo XML real . Por lo tanto, lo siguiente no funcionará dentro de una plantilla:<nowiki>

  • Smith, Adam (1776) ...

porque el parámetro no se expande. En su lugar, puede utilizar la {{#tag:}} función analizador , que se utiliza, por ejemplo, en para generar el elemento; ver también Ayuda: Palabras mágicas § Formateo . Por lo tanto, el siguiente ejemplo funcionará:{{sfn}}...

  • {{#tag:ref | Smith, Adam (1776)... | name={{{param}}} }}

Caution: overextending URLs

If a parameter's value is (or ends with) a URL, check whether it is displayed in Wikipedia with the link overextending by one or more characters after the URL so that clicking the link causes an error or failure. Ensure that, after processing by the software, a soft space (not a hard or non-breaking space) follows the URL, regardless of whether you or a user supplied the URL or whether it was generated by automated processing. Possibly, the source code could contain or generate a space that is discarded in the processing or there might not be any space there. Correct the source code, perhaps by forcing a soft space to appear after the URL. The {{spaces}} template may be useful.

System variables and conditional logic

Template code often makes use of the variables and parser functions described at Help:Magic words in order to make the template's behaviour depend on the environment (such as the current time or namespace) or on the parameter values that are passed to it. They can also be used for arithmetical calculations, but certain standard programming features such as loops and variable assignment are not available. Full string manipulation is also not available; some templates providing such functionality have been created, but they are inefficient and imperfect.

Some of the most frequently used variables and functions are listed below. For more, see Help:Magic words and the fuller documentation at the MediaWiki pages mw:Help:Magic words and mw:Help:Extension:ParserFunctions.

The ParserFunctions extension provides more programming-oriented parser functions.

The {{PAGENAME}} and {{NAMESPACE}}variables are particularly useful, and frequently used, to change template behaviour based on context. For example, if the template transcludes a category link (e.g., cleanup templates, which transclude a link categorizing the page as a page which needs cleanup), it will often check the {{NAMESPACE}} variable to make sure that talk pages, user pages, or anywhere else the tag might incidentally be placed do not themselves get categorized as pages needing cleanup.

Nesting templates

Shortcut
  • WP:NEST

Templates may contain other templates—this is usually called nesting. As the template is processed, the wikitext produced by any nested templates is transcluded into the nesting template, so that the final product is essentially processed from the most deeply nested template out. While fairly straightforward in application, it involves some noteworthy quirks and tricks.

To pass a parameter value to a nested template, place a parameter tag as the value of one of the nested template's parameters.

Examples:
Template:A contains "the quick brown {{B|{{{3}}} }} jumps over..." This takes the value passed to the third positional parameter of Template:A and passes it as the first positional parameter of Template:B, then returns the wikitext produced by B as part of the phrase.
Template:A contains "the quick brown {{B|waldo={{{3}}} }} jumps over..." As previously, except the third positional parameter of Template:A is passed to the named parameter "waldo" of Template:B.

Template parameters themselves can be chosen conditionally.

Examples:
Template:A contains the quick brown {{B|{{{3}}}=fox}} jumps over... Template:A passes the word "fox" as a named parameter of Template:B whose name is A's third positional parameter.
{{#if: test string | value if test string is not empty | {{#if: test string | value if test string is not empty | value if test string is empty (or only white space) }} }}
Shortcut
  • WP:TEMPLATE LOOP

A template can call itself but will stop after one iteration to prevent an infinite loop.

When a nested template contains unmatched braces—as in {{lb}}}—the unmatched braces are treated as text during processing, and do not affect the parsing of braces in the nesting template. If the nested template is substituted, however, the substitution is processed first, and this will change how braces are parsed in the nesting template. This has little practical use, but can occasionally introduce unexpected errors.

See meta:Help:Advanced templates and meta:Help:Recursive conversion of wikitext for more information. These pages also contain information on unusual calls such as {{template {{{parameter|}}} }}.

Inclusion control: noinclude, includeonly, and onlyinclude

Shortcuts
  • WP:NOINCLUDE
  • WP:INCLUDEONLY
  • WP:ONLYINCLUDE

By default, when a template is transcluded (or substituted), the entire wikitext (code) of the template page gets included in that of the target page. However, it is possible to modify that behaviour, using tags that specify which parts of the template code are to be included. This makes it possible to avoid transcluding information intended for display only on the template page itself, such as the template's {{documentation}}, categories, and interwiki links. It is also possible to have parts of the code be transcluded, but not be processed on the template page itself (e.g., categories to be applied to the target pages which do not apply to the template). The tags are as follows:

  • <noinclude>... – The text between the tags will not be included when the template is transcluded (substituted), but will be processed on the template's page; a common use is for documentation in templates.
  • <onlyinclude>... – This specifies that nothing on the page except what appears between the tags will be transcluded (substituted).
  • <includeonly>... – The text between the tags will be transcluded (substituted), but will not be processed on the template's own page.

Perhaps the most common issue with the use of these blocks is unwanted spaces or lines. It is important to remember that the effect of these tags begins immediately before the first angle bracket, not on the previous line or at the previous visible character; similarly the effect ends immediately after the last angle bracket, not on the next line or with the next visible character. For example:

<includeonly>
}}
}}
<noinclude>
}}
}}
<noinclude>
{{template}}
{{template}}

These tags can be nested inside each other, though (for a given page) this really only applies to the <onlyinclude> tag; nesting <includeonly> and <noinclude> tags is fairly pointless. Be careful to properly nest the tags, however. Constructions like <onlyinclude>abc<includeonly>defghi will not work as expected. Use the "first opened, last closed" rule that is standard for HTML/XML.

Problems and workarounds

  • If the first character produced by a template or parser function is one of four wiki markup characters—:, ;, *, #[h]—then it is processed as though it were at the beginning of a line, even when the template tag is not. This allows the creation of various kinds of lists in templates where the template may not always be in the correct place for a list. To avoid this, either use <nowiki /> before the markup or use the HTML entities :, ;, *, and # respectively. In some cases, the HTML entities will work when the does not. The problem often occurs when a parameter value in a template call starts with one of the four characters.
  • For issues involving the substitution of templates, such as how to control whether subtemplates are substituted as well when the parent template is substituted, see Help:Substitution.
  • The template {{Strip whitespace}} can be used to strip any initial or final whitespace from unnamed parameter values if this would cause problems; named parameter values are automatically stripped in this way.
  • For debugging templates, the following techniques are sometimes helpful:
    • Use subst: to substitute a template (rather than transcluding it), which can show more clearly what is happening when the template is transcluded; see Help:Substitution.
    • Use msgnw: (short for "message, nowiki") to more-or-less transclude the wikitext of the template page rather than the processed contents. It is not perfect: lists are rendered, comments are removed, and single newlines are replaced with spaces (which is particularly confounding when transcluding wikitext tables).
    • Use Special:ExpandTemplates to see the full recursive expansion of one or more templates.
  • To protect server resources and avoid infinite loops, the parser imposes certain limits on the depth transclusion nesting and on the page size with expanded templates. This may cause pages to break when using very complex templates, particularly if there are multiple such templates on the same page. For more information, see Wikipedia:Template limits. A page's overall load on the server can be checked by examining the generated HTML for a page and looking for the NewPP limit report comments.
  • Do not use = wikimarkup to create section headers within a template which is intended for use in article space; this will create an [edit] link that, when transcluded, will confusingly open the template for editing.
    • You may avoid [edit] links to the template by including __NOEDITSECTION__.

Documentation

Categorizing your template and documenting its proper usage will make it easier for other editors to find and use.

Documentation for users, together with the template's categories, is normally placed after the template code, inside ... tags. It is normally necessary to put the opening tag immediately after the end of the code, with no intervening spaces or newlines, to avoid transcluding unwanted whitespace.

In the case of complex templates, the documentation (together with categories) is often kept on a separate subpage of the template page (named "Template:XXX/doc"). This also applies to many protected templates, which allows the information to be edited by non-administrators. This is achieved by placing the {{Documentation}} template after the main template code and within ... tags. If the "/doc" subpage does not exist, a link will then appear enabling it to be created.

Categorization

Categorize pages by template inclusion

Some templates contain category definitions in their transcluded code, since they are intended to place the target pages in particular categories. This is often done with maintenance categories (placing articles into ordinary content categories in this way is discouraged). When doing this, it may be necessary to use ... tags to keep the template itself out of the category. While developing, testing, sandboxing, or demonstrating a template intended to apply a category, either temporarily replace each category with a test category (starting with X1, X2, or X3) or suppress categorization (see category suppression in templates).

Categorize templates

Categorization declaration [[Category:Some-topic templates]] should be placed on the template's documentation page (or inside ... tags if there is no documentation page) to avoid polluting the transcluding pages.

Aliases

Aliases can be created with redirects. For example, Template:Tsh redirects to Template:Template shortcut. You can then write {{tsh|foo}} instead of {{Template shortcut|foo}}.

It is good to prepare template aliases which only differ in whitespaces and capitalization. For example, there is a template called {{See Wiktionary}}. The "W" is capital, since the word "Wiktionary" is so, but a redirect {{See wiktionary}} with lower "w" exists because users may type the latter instead.

"Post-expand include size" limit. When templates are rendered or expanded to HTML for viewing in your browser, they use memory. This is called the "post-expand include size" and has a limit of 2,048,000 bytes. This size is included as an invisible comment in the HTML output—use your browser's view source feature to show the raw HTML and search for "newpp". The report will look like:

The example shows that template expansion is using 63,476 bytes out of 2,048,000 bytes of available memory.

Display problem. If too many templates are included on a page, the post-expand include size may exceed the limit. When this happens, templates after the limit will no longer expand and will instead display as a wikilink (for example, Template:Template name). Common causes are the inclusion of too many citation templates and/or flag templates. To resolve this problem substitute templates, remove templates, or split the page.

Non-rendered tranclusions still count towards limit. For example, a page which contains only {{#if:{{:Main Page}}}} would still have a post-expand include size even though it would have no output at all.

The same applies to Scribunto modules. For example, {{#invoke:Test|main}} would still increase post-expand include size even if Module:Test were simply:

mw.getCurrentFrame():preprocess "{{msgnw::Main Page}}" -- remove this line and post-expand include size becomes zeroreturn {main = function() end} -- p.main() has no return value

Since February 2013, the Lua programming language is available for use through the Scribunto MediaWiki extension. Lua code can be embedded into templates by employing the {{#invoke:}} functionality of the Scribunto MediaWiki extension. The Lua source code is stored in pages called modules, and these individual modules are then invoked on template pages. For example, Module:Example can be invoked using the code {{#invoke:Example|hello}} to print the text "Hello World!".

As an alternative to using this index linked above, you can search the Template namespace using the Special:Search box below:

  1. ^ Namespaces from which transclusion is not allowed are specified on a wiki by the variable $wgNonincludableNamespaces.
  2. ^ Some templates, such as {{Requested move}}, have code to display |reason= as visible output; whether to do so is determined on a template-by-template basis.
  3. ^ λ is the HTML character entity for the Greek letter (λ).
  4. ^ Since the new wikitext itself needs to be reviewed, and new wikitext itself cannot be previewed during source editing, previewing the page will not illustrate the result of the template substitution in the wikitext.
  5. ^ This does not apply if the equals sign comes within another template call or other item which the parser handles separately.
  6. ^ Again, this does not apply if it comes within another separately parsed item, such as a piped wikilink.
  7. ^ For an old version, the subtemplate tree will be constructed according to the templates' current state.
  8. ^ These are defined in the doBlockLevels function of Parser.php.