La sustitución es una función mediante la cual, cuando un editor guarda una página, un elemento del wikicode se reemplaza permanentemente por su valor actual. En particular, se puede sustituir una plantilla , como alternativa a la transclusión . La diferencia es que cuando se sustituye una plantilla en una página, su apariencia en esa página ya no se verá afectada por los cambios posteriores realizados en la propia plantilla (como es el caso de una plantilla transcluida).
La sustitución se realiza utilizando el subst:
modificador después de los tirantes de doble apertura. Por ejemplo, para sustituir la plantilla {{ afd }}, escriba {{subst:afd}}
. Puede comprobar el wikitexto resultante antes de guardar haciendo clic en "Mostrar cambios" (y ver cómo se verá la página haciendo clic en "Mostrar vista previa").
Las variables y las funciones del analizador también se pueden sustituir, lo que significa que su valor actual se registrará permanentemente en la página; no se volverán a evaluar cada vez que alguien vea la página.
Cuando usar la sustitución
En términos generales, las plantillas se incorporan en lugar de sustituir, aunque hay algunas que están diseñadas específicamente para ser sustituidas (y es posible que no funcionen si se trasladan). Algunas razones para sustituir plantillas incluyen:
- hacer que la página resultante sea independiente de futuros cambios en la plantilla
- permitir que se produzcan otros reemplazos automáticos (por ejemplo, una plantilla puede contener cuatro tildes, que serán reemplazadas por la firma del usuario y la marca de tiempo siempre que se sustituya la plantilla)
- permitir que la página se copie en otro proyecto sin copiar la plantilla
- hacer que la representación de la página sea más rápida para el servidor
- hacer que la correspondencia entre el wikitexto y la página renderizada sea más fácil de entender (lo contrario también puede aplicarse)
Las desventajas de la sustitución pueden incluir:
- Las actualizaciones de la plantilla no se reflejarán en la página de destino.
- El wikitexto resultante es más largo y complicado
- Otros usuarios no pueden ver que el texto se produjo usando una plantilla (y no aprenderán a usar la plantilla)
- Muchas plantillas agregan un comentario oculto, como
al final de su salida, para mitigar este problema.
- Muchas plantillas agregan un comentario oculto, como
Las variables dependientes del tiempo se sustituyen para que la página renderizada sea independiente del momento en que se visualiza. La sustitución de variables dependientes de la página hace que el wikitexto resultante sea independiente del cambio de nombre de la página y de la copia en otra página.
Para obtener una guía más detallada, incluidas listas de plantillas que deben o no deben sustituirse, consulte Wikipedia: sustitución .
Sintaxis
Para sustituir una plantilla, use la misma sintaxis que para la transclusión , pero incluya subst:
después de las llaves dobles de apertura. Por ejemplo, para sustituir la plantilla {{ afd }}, escriba {{subst:afd}}
. Se pueden incluir parámetros como en el caso de la transclusión, por ejemplo {{subst:afd|Some article}}
.
Las páginas que no están en el espacio de nombres de la plantilla también se pueden sustituir, p {{subst:User:Cleverclogs/My box}}
. Ej . Para sustituir el contenido actual de una página en el espacio principal (es decir, uno sin prefijo de espacio de nombres), se requieren dos dos puntos, como en {{subst::Page}}
. Si no existe una página o plantilla sustituida, la expresión completa (con llaves y subst :) permanecerá sin cambios en el wikitexto y en la página.
Utilice la misma sintaxis para sustituir variables y funciones del analizador, por ejemplo, {{subst:PAGENAME}}
o {{subst:#switch:{{NUMBEROFADMINS}}|1=Foo|1000=Bar|#default=Baz}}
.
Puede haber un espacio en blanco entre las llaves de apertura y "subst:". Sin embargo, se recomienda no tener espacios ni líneas nuevas inmediatamente después de "subst:", ya que esto no funcionará en todos los casos.
Implementación técnica
La sustitución es parte del proceso que se realiza al guardar una página y hace que el wikitexto guardado como resultado de la edición difiera del texto que el usuario realmente ingresó en la ventana de edición. Otros reemplazos realizados durante este proceso incluyen la expansión de enlaces utilizando el truco de tubería y el reemplazo de múltiples tildes con firmas y marcas de tiempo.
Esto significa que la sustitución ocurre necesariamente antes de cualquier acción realizada en el momento de la representación de la página (conversión del wikitexto almacenado a HTML). En particular, las sustituciones se realizan antes de las transclusiones . Por lo tanto, escribir {{subst:Help:L{{in(tut)}}k}}
no sustituirá, aunque {{ in (tut) }} devuelve el texto "in" y Help: Link existe. La transclusión de {{ in (tut) }} aún no ha tenido lugar cuando se intenta la sustitución. Sin embargo, reemplace {{in(tut)}}
con {{subst:in(tut)}}
, y ambas sustituciones se realizarán en el orden esperado.
Similar:
- Escribir
{{subst:#if:{{x0}}|yes|no}}
le da al wikitexto "sí", aunque {{ x0 }} es una plantilla vacía, ya que el parámetro condicional se evalúa como la cadena no vacía "{{x0}}". Sin embargo{{subst:#if:{{subst:x0}}|yes|no}}
produce "no", ya que la sustitución interna se realiza primero. - La escritura
{{subst:#expr:2*{{{p|3}}}}}
devuelve Error de expresión: carácter de puntuación no reconocido "{" , ya que el parámetro no definido {{{p}}} no ha sido reemplazado por su valor predeterminado (3) cuando ocurre la sustitución. - Si {{ t6 }} contiene el texto "t2 | a", entonces
{{ {{subst:t6}} }}
producirá el wikitexto "{{t2 | a}}", representado como "[[w: Lista de personas por nombre: a {{{2}} } | a {{{2}}}]] "Contraste esto con el comportamiento de{{ {{t6}} }}
, que se representa como" {{t2 | a}} ", porque el analizador no reinterpreta la tubería como un separador durante el no sustituido etapa de expansión. (Del mismo modo,{{subst:{{subst:t6}} }}
proporciona el wikitexto{{subst:t2|a }}
, que solo en la próxima edición se sustituirá por [[w: Lista de personas por nombre: a {{{2}}} | a {{{2}}}]].)
Al hacer clic en el botón "Mostrar cambios" durante la edición, se muestra el wikitexto que resultará después de que se lleven a cabo la sustitución y otros reemplazos inmediatos. Al hacer clic en "Mostrar vista previa", se muestra cómo se verá la página renderizada después de estos reemplazos.
Si una página se sustituye a sí misma (por ejemplo, en la parte no incluida de una página de plantilla), sustituye a la versión anterior, como estaba antes de la edición actual.
Si la expansión de una plantilla sustituida contiene instancias de la subst:
sintaxis, las sustituciones se realizan de forma recursiva. Sin embargo, la sustitución no es automáticamente recursiva : si una plantilla sustituida contiene transclusiones o variables ordinarias y funciones de analizador que no se sustituyen explícitamente, estas no se sustituirán.
Tenga en cuenta también que si subst:
aparecen instancias de la sintaxis en una plantilla que se está transcluyendo , entonces se renderizarán sin cambios (como "{{subst: ...}}"), ya que no es posible realizar ninguna sustitución en el wikitexto en la etapa de renderizado. Esta característica se puede aprovechar para controlar el comportamiento de la plantilla (consulte § Hacer que las plantillas se comporten de manera diferente cuando se transcluyen o sustituyen ). Sin embargo, puede ser inconveniente cuando una plantilla está diseñada para que sea posible transcluir y sustituir; en este caso, safesubst:
se puede usar en lugar de subst:
(ver § El modificador safesubst:) .
El safesubst: modificador
El subst:
modificador se puede reemplazar por el modificador alternativo safesubst:
. Los dos tienen el mismo comportamiento, excepto cuando se encuentran durante la expansión no sustituida (transclusión o visualización directa) de una plantilla. En tal situación, el código {{subst:...}}
permanece sin analizar; mientras que {{safesubst:...}}
se trata como si no hubiera ningún modificador presente, por lo que la subplantilla se transcluye o se evalúa la variable o función del analizador.
Por tanto, el safesubst:
modificador se utiliza en el código de las plantillas que están diseñadas para producir una sustitución recursiva cuando se sustituyen; pero que también están pensados para funcionar cuando se traducen o simplemente para ser vistos directamente. En contraste con el uso del subst:
modificador, tales plantillas se romperían en tales casos de transclusión (y posiblemente en la visualización directa).
Para obtener detalles sobre cómo implementar esto (en particular, cómo evitar que se realice la sustitución tan pronto como se guarde el código de la plantilla), consulte § Sustitución recursiva .
Sustitución recursiva
Como se mencionó anteriormente, la sustitución no es automáticamente recursiva. Por tanto, si una plantilla sustituida tiene código que contiene transclusiones de otras plantillas y funciones de analizador, ese código se copiará "tal cual" en el wikitexto resultante; los elementos transcluidos no se sustituirán por sí mismos.
Para que la sustitución funcione de forma recursiva, debe incluir la subst:
sintaxis en el código de la plantilla de llamada. Sin embargo, no puede hacer esto simplemente escribiendo "subst:" dentro de la plantilla, ya que la sustitución se realizará tan pronto como se guarde la plantilla. Hay dos formas de solucionar este problema:
- Úselo
subst:
en lugar de lisosubst:
. La etiqueta noinclude rompe la sintaxis de sustitución cuando se guarda la plantilla, pero se eliminará cuando se sustituya posteriormente, permitiendo que la sustitución interna surta efecto. - Hacer "subst:" el valor posible de una expresión que contiene un parámetro, como
{{{subst-foo|subst:}}}
, que se evaluará como "subst:" siempre que el parámetro subst-foo no esté establecido. Esta es una solución más flexible, ya que permite controlar el comportamiento a través del parámetro. Por ejemplo, una plantilla de este tipo podría llamarse usando , asignando al parámetro un valor vacío y, por lo tanto, desactivando el segundo nivel de sustitución. Si no se planea usar el parámetro, el nombre del parámetro a menudo se elige como la cadena vacía, dando .{{subst:Templatename|subst-foo=|..}}
{{{|subst:}}}
Para asegurarse de que la plantilla seguirá funcionando según lo previsto si se transcluye en lugar de sustituirse, utilice en safesubst:
lugar de subst:
. Esto también se aplica si la plantilla también se va a ver directamente, en su propia página (aunque en este caso, si se usa el primero de los métodos anteriores, plain subst: seguirá funcionando, ya que las etiquetas includeonly harán que el analizador ignore el subst: en visualización directa).
Para ver lo que producirá una plantilla cuando esté completamente expandida, sin la necesidad de sustituir explícitamente todas las subplantillas, etc., se puede usar la herramienta Especial: ExpandTemplates .
Para obtener más información, consulte la página de ayuda Conversión recursiva de wikitexto en Meta. Consulte también Ayuda: Cálculo § Sustitución , m: Plantilla: Tabla de ejemplo con cálculos, con sustitución opcional ( edición de vínculos de retroceso ) y la solicitud de función en la subasta .
Sustitución recursiva en visitas guiadas
Las visitas guiadas pueden realizar publicaciones en nombre de los usuarios, como publicar automáticamente el contenido de una página wiki en una página de discusión. Sin embargo, a diferencia de la sustitución o transclusión normal, esta función de las visitas guiadas no respeta
un marcado similar. Para hacer que la sustitución recursiva funcione mediante la publicación de visitas guiadas, puede usar el método de plantilla de demora: método de sustitución descrito en Meta.
Un ejemplo de recursividad en acción
Este es un ejemplo que utiliza la plantilla real : Me gusta y una plantilla hipotética: Foo. Está intentando incluir la Plantilla: Foo, e indirectamente la Plantilla: Me gusta, en una tercera página a través de la transclusión y sustitución. Plantilla: Like muestra este símbolo: Como
Por ejemplo, digamos la Plantilla: Foo contenía el wikitexto {{Like}}
. Si luego lo transcluye, usando el wikitexto {{Foo}}
, esto transcluirá la Plantilla: Como es de esperar. Pero si usa el wikitexto {{subst:Foo}}
, cuando lo guarda encontrará el wikitexto {{Like}}
sustituido en lugar del wikitexto de la página Plantilla: Me gusta. La sustitución no ha sido recursiva.
Un ejemplo de recursividad sería si la Plantilla: Foo contuviera el wikitexto {{{{{|safesubst:}}}Like}}
. Ahora, si lo transcluye, usando el wikitexto {{Foo}}
, esto transcluirá la Plantilla: Igual que antes. Y si lo guarda {{subst:Foo}}
, sustituirá al wikitexto real completo de la Plantilla: Me gusta. Por lo tanto, ha logrado una sustitución recursiva.
Más ejemplos
Nota: {{!}} Sustituye a |.
Wikitexto de Plantilla: Foo | Cuando ve Template: Foo, se ve así: | El resultado de {{Foo}} si se incluye en esta página | El resultado de {{subst: Foo}} si se incluye en esta página | ||
---|---|---|---|---|---|
guarda como: | se presenta como: | guarda como: | se presenta como: | ||
{{!}}{{NOMBRE DE LA PÁGINA}}{{#if: 1 | si | No}} | | Foo sí | {{Foo}} | | Sustitución sí | {{!}}{{NOMBRE DE LA PÁGINA}}{{#if: 1 | si | No}} | | Sustitución sí |
{{{{{| subst:}}}!}}{{{{{| subst:}}} PAGENAME}}{{{{{| subst:}}} # si: 1 | si | No}} | {{subst :!}} {{subst: PAGENAME}} {{subst: #if: 1 | si | No}} | {{Foo}} | {{subst :!}} {{subst: PAGENAME}} {{subst: #if: 1 | si | No}} | |Sustituciónsí | | Sustitución sí |
{{{{{| safesubst:}}}!}}{{{{{| safesubst:}}} PAGENAME}}{{{{{| safesubst:}}} # si: 1 | si | No}} | | Foo sí | {{Foo}} | | Sustitución sí | |Sustituciónsí | | Sustitución sí |
Hacer que las plantillas se comporten de manera diferente cuando se transfieren o sustituyen
A veces es deseable hacer que una plantilla se comporte de manera diferente cuando se sustituye que cuando se transcluye. Un truco común para hacer esto es usar una expresión como {{{{{subst|subst:}}}ns:0}}
. Esto se evalúa como la cadena vacía si se sustituye la plantilla (ya que la sustitución interna tiene efecto, dando el prefijo del espacio de nombres 0, que está vacío), pero a "{{subst: ns: 0}}" si la plantilla está siendo transcluido (ya que la sustitución no puede tener lugar después de la transclusión).
Una aplicación común son las plantillas que están diseñadas solo para ser sustituidas, para que produzcan una advertencia si en su lugar se transfieren por error. Esto se hace en plantillas como {{ prod }}, que están diseñadas para producir una marca de tiempo (por ejemplo, para agregar páginas a categorías con fecha), y no podrán hacerlo si se transfieren.
Se ha creado una plantilla, {{ issubst }}, para simplificar esto. Devuelve "sí" si se está realizando la sustitución, o la cadena vacía en caso contrario. Luego, esto se puede usar como parámetro de una función de analizador condicional para hacer que la plantilla muestre un método de advertencia si se está transfiriendo, o para cambiar el comportamiento de una plantilla dependiendo de si se está transfiriendo o sustituyendo.
Documentar la sustitución
El uso de una plantilla subst:
no se muestra automáticamente en los historiales de la página. Por lo tanto, proporcionar la línea de wikitexto que contiene "subst:" en el resumen de edición es especialmente útil.
Además, las páginas con una plantilla sustituida no se muestran en los vínculos de retroceso y la plantilla no aparece en la lista de plantillas incorporadas en la página de edición. La plantilla podría agregar páginas a una categoría para realizar un seguimiento de las sustituciones, pero incluir esta categoría en una página puede saturar la lista de categorías basadas en el contenido en las que se encuentra la página. Además, los comentarios fuera de las etiquetas noinclude se incluyen en el wikitexto. Por tanto, se puede utilizar un comentario para mencionar la plantilla. La sustitución de parámetros no funciona dentro de los comentarios, pero una solución alternativa es comenzar con un comentario previsto --
para que se convierta en un comentario una vez que se transcluya.
Limitación
La sustitución no está disponible en el interior ...
y las
etiquetas. Si escribe {{subst:foo}}
, no se sustituye ni se transcluye, pero permanece como está (es un error conocido, consulte T4700 y gerrit: 272916 para conocer el estado actual).
Sin embargo, es posible eludir esta limitación utilizando la palabra mágica #tag. Si escribe, por ejemplo, {{safesubst:#tag:ref|content of the reference}}
el contenido de la referencia se sustituirá y el {{#tag:ref|...}}
se sustituirá por ...
. Un ejemplo más concreto: si escribe, por ejemplo {{safesubst:#tag:ref|...Title=ExampleTitle|archivedate={{subst:TODAY}}|Edition=Hardcover...}}
, el software realizará sustituciones en el texto dentro del último campo y {{#tag:ref|...}}
se reemplazará con ...
alrededor del texto alterado, y la referencia se guardará con la sustitución; se guardará como " {{|...Title=ExampleTitle|archivedate=29 January 2016|Edition=Hardcover|...}}
" con ...
alrededor. En otras palabras, primero el software expandirá las plantillas y luego colocará ese texto expandido dentro de las etiquetas de referencia.
Plantillas para sustitución
- {{ require subst }} puede envolver plantillas que requieren subst:
- {{ issubst }}: devuelve "sí" cuando se sustituye.
- {{ ifsubst }}: similar a #if: palabra mágica , a juzgar por sustituido o no.
Ver también
- Sustitución de tontos
- m: Ayuda: Sustitución , una página de ayuda más larga y técnica en Meta
- mw: Extensión: ExpandTemplates
- bugzilla: 2003 - solicitud de función para permitir marcar una plantilla como sustituida sin "subst:"
- Plantillas que contienen una llamada a sí mismo con "subst:" y producen una llamada similar con información actualizada, ya sea reemplazando o agregando la información anterior:
- m: Plantilla: última edición ( edición de backlinks ) - ejemplo: última edición
- m: Plantilla: historial de la página ( editar vínculos de retroceso )
- WikiProject Check Wikipedia § El elemento de programación de plantillas enumera los artículos donde las plantillas fueron sustituidas en lugar de transcluidas. [ enlace muerto ] (Según Wayback Machine, la última vez que funcionó este enlace fue en mayo de 2010. Parece que se ha eliminado desde entonces. ¿Quizás esta página de herramientas pueda ayudar a encontrar artículos sustituidos en lugar de transcluidos?)