Help:Substitution/es
![]() |
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. Algunas versiones antiguas de esta página fueron importadas bajo licencia CC BY-SA. Solo las contribuciones nuevas están en el dominio público (DP). |
![]() |
La sustitución es la conversión automática de wikitexto en una página cuando esta se guarda, en caso de que el wikitexto se refiera a una o más plantillas, variables o funciones del analizador sintáctico.
En el caso de la sustitución de plantillas, la llamada a la plantilla se reemplaza por el contenido de la plantilla con sustitución de los parámetros. Así, la plantilla se utiliza a modo de macro la página es sometida a expansión de macros cuando se guarda en lugar de, como suele ocurrir, cuando se ve.
En el caso de la sustitución de una variable o de una función del analizador, la referencia a la misma es reemplazada por el valor resultante.
La sustitución se lleva a cabo introduciendo la palabra mágica subst:
o safesubst:
después de las dobles llaves de apertura sin espacios intermedios como en los ejemplos {{subst:FULLPAGENAME}}
y {{safesubst:FULLPAGENAME}}
.
El código safesubst:
es útil en la sustitución multinivel, véase a continuación.
El resultado (bajo la forma de la diferencia respecto del wikitexto guardado) se puede ver antes de guardar (o sin guardar) pulsando Mostrar los cambios
.
Sin embargo, si el texto cubre más de un párrafo, esta página de diferencia no es muy adecuada para copiar el resultado (p. ej., para una sustitución paso a paso sin guardar cada paso) debido a la presencia de signos más (+) en el margen.
Aplicaciones
Sustitución de una plantilla:
- Hacer que la representación de una página sea independiente de la plantilla:
- La página representada no cambia si se edita la plantilla.
- La página se puede copiar a otro wiki de MediaWiki sin copiar la plantilla.
- Facilitar la representación de páginas y por tanto hacer que este proceso sea más rápido para el servidor.
- Analizar y demostrar el funcionamiento de las plantillas. Sin embargo, en algunos casos, la sustitución funciona de forma diferente.
- Hace que la correspondencia entre el wikitexto y la representación de la página sea más fácil de entender (puede darse esto, aunque también puede darse lo contrario).
Sustitución de una variable dependiente del tiempo:
- Hacer que la representación de una página sea independiente del tiempo.
Sustitución de una variable dependiente de la página:
- Hacer que la representación de una página sea independiente de cambios de nombre de la misma y del copiado del wikitexto a otra página (aunque se aplica lo contrario si se utiliza la variable PAGENAME en una parte de la página con noinclude para incluir la propia página).
Algunas extensiones de MediaWiki tienen la restricción de que, si se utilizan en una plantilla con parámetros, solo funcionan si la plantilla está sustituida.
Visión general
En lo que concierne a la sustitución, una «plantilla ordinaria» es la página a la que se hace referencia, ya sea mediante el patrón {{subst:pagename }} (para las páginas del espacio de nombres de las plantillas) o {{subst:fullpagename }} (para las páginas de otros espacios de nombres). Una «plantilla predefinida» es una variable o una función del analizador sintáctico que es sustituida de forma similar.
La sustitución es un proceso propio que se realiza antes de la expansión de cualquier plantilla, variable, función del analizador o parámetro que no se haya sustituido.
Una llamada de sustitución puede incorporar a su vez otras llamadas de sustitución. De forma similar, la plantilla sustituida en una sustitución puede contener otras llamadas de sustitución. En primer lugar se realizan las sustituciones en la expresión para el nombre de la plantilla o función del analizador, en las definiciones de parámetros de la plantilla o función del analizador sustituida y en el cuerpo de la plantilla sustituida.
Dado que la expansión se realiza posteriormente, en cualquier expresión utilizada en una sustitución que contuviera pares de llaves dobles, las llaves serán tratadas como texto plano.
Por tanto, durante la sustitución, puede haber un nombre de parámetro entre llaves en la llamada de sustitución (p. ej., {{subst:foo|a{{bc}}d=...}}
) que corresponda a un parámetro con el mismo nombre en el cuerpo de la plantilla (p. ej., {{{a{{bc}}d}}}
).
Si se trata de aplicar la sustitución a una plantilla, etc., inexistente, no habrá sustitución, el prefijo «subst:» se mantendrá en el wikitexto.
Después del proceso de sustitución, la expansión de plantillas, etc., y otros procesos sobre el wikitexto resultante funcionan como de costumbre. Dado que la sustitución ya está terminada, esto no puede deshacer una incoherencia en los nombres de parámetros que pudiera producirse durante la sustitución (véase también la sección «Sustitución parcial» a continuación).
La sustitución solo es posible si se ha evaluado completamente todo lo que sigue:
- el nombre de la plantilla, variable o función del analizador sintáctico
- en el caso de una plantilla: los nombres de los parámetros en la llamada a la plantilla y en la plantilla misma
- en el caso de #if, #ifexpr, #ifexist y #iferror, el parámetro que va después de los dos puntos
- en el caso de #ifeq, el parámetro que va después de los dos puntos y el siguiente
- en el caso de #switch, el parámetro que va después de los dos puntos y las expresiones a la izquierda de los signos igual
Dado que, como se dijo antes, la sustitución se lleva a cabo antes de cualquier otra expansión, la evaluación necesaria que ya se mencionó antes no se llevó a cabo si las expresiones implican una expansión sin sustitución.
Además, en el caso de otras funciones del analizador distintas de las mencionadas, un parámetro a continuación de los dos puntos que no se haya evaluado completamente provoca que la función del analizador se aplique al wikitexto entre llaves y no al wikitexto expandido, lo que afecta al resultado.
Ejemplos:
- {{subst:Help:L{{tc}}k}} con Template:tc no hace la sustitución, ya que Help:L{{tc}}k no es una página existente, aunque Help:L{{tc}}k se genera como Help:Link. Así, el wikitexto resultante es el mismo que el wikitexto original y se genera como {{subst:Help:Link}}.
- {{#if:{{void|abc}}|yes|no}} (mediante Template:void) se genera como «no», por lo que {{subst:#if:{{subst:void|abc}}|yes|no}} devuelve de forma similar el wikitexto «no». Por otra parte, {{subst:#if:{{void|abc}}|yes|no}} devuelve el wikitexto «yes» porque Template:void no se resuelve hasta después de la sustitución.
En principio, el wikitexto resultante de la sustitución completa, inmediatamente después de la misma, se generará de la misma forma que el wikitexto resultante de una inclusión ordinaria.
Sin embargo, ten en cuenta que, en la sustitución de una función del analizador, un parámetro indefinido con un valor predeterminado, utilizado como valor de un parámetro, no será reemplazado por el valor predeterminado (en Wikipedia en inglés), y por ejemplo no está permitido en la expresión numérica evaluada en la sustitución de #expr:
- {{#expr:2*{{{p|3}}}}} devuelve 6, mientras que {{subst:#expr:2*{{{p|3}}}}} devuelve: Expression error: unrecognised punctuation character "{"
En la sustitución de una plantilla que contenga esto, {{{p|3}}} será reemplazado por el valor de {{{p}}} o bien por 3, lo que no supone complicación.
{{ {{t6}} }} mediante Template:t6 con el contenido «t2demo|a<noinclude>[[Category:Demo templates]]</noinclude>
» se generará como {{ t2demo|a }}.
{{subst:{{subst:t6}} }} devuelve el wikitexto {{subst:t2demo|a }}, que se genera igual que el wikitexto, y en la próxima edición o el próximo guardado cambiará a start-a -middle-{{{2}}}-end.
{{ {{subst:t6}} }} devuelve el wikitexto {{ t2demo|a }}, que se genera como start-a -middle-{{{2}}}-end.
Esto es porque, tanto sin sustitución como con la sustitución completa, las plecas (|) en las llamadas a plantillas (excluyendo las presentes en llamadas a plantillas internas, parámetros de plantillas, enlaces y etiquetas de imagen) determinan la separación entre las distintas definiciones de parámetros y entre ellas y el nombre de la plantilla.
Esta separación no depende de posibles plecas adicionales en la forma expandida del nombre de la plantilla y de las definiciones de parámetros.
Sin embargo, si después de la sustitución de una plantilla interna la pleca se encuentra en la llamada a la plantilla externa, se trata como cualquier otro carácter y desempeña su papel para determinar la separación.
En otras palabras, el análisis sintáctico se realiza primero una vez para la sustitución, y después otra para la generación, pero en cualquier caso no se realiza una vez adicional entre los dos procesos.
Solo en el caso de la sustitución de la plantilla interna, son efectivos dos análisis sucesivos.
Al sustituir una plantilla que contenga {{{p|q}}} (una etiqueta de parámetro con un valor predeterminado), esto da lugar al valor p si el parámetro está definido, y q si no. Por ejemplo, al utilizar {{timc|t pd}} (en Wikipedia en inglés), {{subst:t pd}} devuelve el wikitexto 2. Si una página se sustituye a sí misma (p. ej., en la parte noinclude de una página de plantilla), sustituye la versión anterior.
Consideraciones de uso
Como ya se mencionó, la modificación de una plantilla ordinaria después de la sustitución no afecta a la página en la que fue sustituida, y una variable sustituida dependiente del tiempo deja de depender del tiempo, etc. Sin embargo, la sustitución de {{#expr:2*3}} p. ej. no afecta en absoluto a la representación.
La relación entre el wikitexto de una página y su representación puede volverse más fácil de entender después de la sustitución, ya que esta tiene todo el wikitexto junto, y ya se ha realizado la sustitución de parámetros.
También puede volverse más compleja. Puede ser más fácil para uno concentrarse separadamente en entender la llamada a una plantilla y el contenido de la plantilla. El wikitexto después de la sustitución a menudo es más complejo que si se hubiera escrito directamente el wikitexto requerido.
A diferencia de la llamada a una plantilla (si sabemos de plantillas), el wikitexto después de la sustitución no muestra cómo se puede lograr un resultado similar. El wikitexto puede ser largo y complejo, y por tanto costoso de escribir directamente, o puede ser simple, p. ej., el resultado numérico de un cálculo, pero difícil de encontrar directamente. Al estudiar el wikitexto de una página, se podría pensar que el wikitexto es lo que se debería escribir y encontrar directamente para obtener el resultado, incluso en los casos en los que sería muy poco práctico.
En casos así, es útil disponer de documentación de la llamada a la plantilla. Al igual que en la programación informática, cambiamos el código fuente y/o los datos para producir nuevos resultados, y no cambiamos directamente el archivo objeto; aquí cambiaríamos las llamadas a plantillas y/o las plantillas mismas en lugar de cambiar directamente el wikitexto resultante de la sustitución.
Plantillas ordinarias
En el caso de la sustitución de una plantilla ordinaria, la etiqueta de la plantilla es reemplazada por el wikitexto de la plantilla, sustituyéndose los parámetros por sus valores.
- Ejemplo: m:Template:t2, que contiene
start-{{{1}}}-middle-{{{2}}}-end
- y llamada como
{{subst:t2|[[a]]|{{tc}}}}
(véase {{Tc}}) devuelve el wikitexto:start-[[a]]-middle-{{tc}}-end
, representado como- start-a-middle-in-end.
La sustitución elimina las partes noinclude y las etiquetas includeonly
Parámetros:
- Una sustitución con p=r reemplaza {{{p}}} y {{{p|q}}} por
r
. Esto incluye los casos en quer
es de la forma {{{s}}} o {{{s|t}}}. - Una sustitución con
p
no definido preserva{{{p}}}
y reemplaza {{{p|q}}} por el valor predeterminadoq
(en Wikipedia en inglés).
Con subst:
, el reemplazo de una etiqueta de plantilla por wikitexto no funciona de forma recursiva.
Para la sustitución recursiva completa, véase Special:ExpandTemplates.
Véanse también substall y la sustitución multinivel a continuación.
La sustitución por etapas de plantillas que incluyen otras plantillas (que a su vez incluyen otras plantillas, etc.) puede ser útil para analizar y documentar el comportamiento de plantillas complejas.
Sin embargo, después de una sustitución, es posible que una página se represente de forma diferente, p. ej., si hay plantillas que produzcan llaves, plecas y/o signos igual que después de la sustitución determinen la expansión de otras plantillas, pero que sin la sustitución se traten como texto plano.
A falta de parámetros, se puede comparar la sustitución de plantillas con copiar el wikitexto o con la representación de una inclusión de {{ msgnw:
nombre de página }} previsualizada o guardada.
Sin embargo, la sustitución de plantillas excluye las partes <noinclude>
, elimina las etiquetas <includeonly>
y reemplaza los parámetros indefinidos con valores predeterminados por dichos valores predeterminados.
Plantillas predefinidas
En caso de sustituir una plantilla predefinida sin parámetros que depende de otras plantillas, la etiqueta es reemplazada por el resultado.
subst:
delante de la plantilla predefinida sin espacios intermedios.Aplicar subst a una variable funciona igual que aplicárselo a una plantilla. P. ej., una marca de tiempo:
- {{subst:CURRENTYEAR}}-{{subst:CURRENTMONTH}}-{{subst:CURRENTDAY}} T {{subst:CURRENTTIME}} [[w:UTC|]]
puede devolver el wikitexto
- 2010-04-10 T 06:30 [[w:UTC|UTC]]
que se representa como
- 2010-04-10 T 06:30 UTC
En caso de sustituir una plantilla predefinida con un parámetro que dependa de otra plantilla, esta también debe sustituirse, con un modificador separado subst:
; de lo contrario, el resultado estará indefinido.
{{subst:UC:{{subst:tc}}}}
- devuelve IN, el mismo wikitexto al que se expande {{UC:{{tc}}}};UC:
se aplica a la salida «in» de Tc.{{subst:ns:{{subst:#expr:2*3}}}}
- devuelve File.{{ns:{{subst:#expr:2*3}}}}
- devuelve el wikitexto {{ns:6}}, representado como File.{{subst:t1|{{subst:NAMESPACE}}}}
- devuelve el wikitexto startHelpend (véase {{T1}}){{subst:t1|{{subst:#expr:3*4}}}}
- devuelve el wikitexto start12end{{subst:t1|{{subst:uc:AbCdEf}}}}
- devuelve el wikitexto startABCDEFend{{subst:#expr:{{subst:3X|11*}}1}}
- devuelve el wikitexto 1331{{subst:UC:{{subst:3X|abc}}}}
- devuelve el wikitexto ABCABCABC{{subst:LC:{{subst:#expr:1/100000}}}}
- devuelve el wikitexto 1e-05{{subst:#expr:2*{{subst:CURRENTDAY}}}}
- devuelve (en el momento de la redacción de la página) el wikitexto 30{{subst:UC:{{subst:CURRENTDAYNAME}}}}
- devuelve (en el momento de la redacción de la página) el wikitexto THURSDAY
Sin embargo:
{{subst:UC:{{tc}}}}
- devuelve el wikitexto{{TC}}
, representado como the current page's transclusion count.{{subst:ns:{{#expr:2*3}}}}
- permanece como {{subst:ns:{{#expr:2*3}}}}, representado como {{subst:ns:6}}.
Como ya se mencionó antes, en la sustitución, todas las llamadas sin sustitución de plantillas, variables y funciones del analizador se tratan como texto plano.
Como resultado de ello, la sustitución del x:
externo en un {{ x:...
{{ y:...
}} }} anidado solo es adecuada si se sustituyen asimismo todos los y:
internos.
En el caso de la sustitución de una plantilla predefinida, si la expresión de uno de sus parámetros contiene {{{p|3}}} con un p
indefinido, este código se reduce a 3.
Sin embargo, en la propia página, se trata {{{p|3}}} como tal, y no como 3.
Ejemplos:
{{#expr:2*{{{p}}}}}
→Expression error: Unrecognized punctuation character "{".
{{#expr:2*{{{p|3}}}}}
→6
{{subst:#expr:2*{{{p|3}}}}}
→ Expression error: Unrecognized punctuation character "{".- al sustituir una plantilla que contenga {{<includeonly>subst:</includeonly>#expr:2*{{{p|3}}}}} se obtiene 6 si
p
no tiene un valor asignado, y el doble del númerop
en caso de que sí tenga un valor asignado. - se puede obtener el mismo resultado a partir de una plantilla que contenga {{{{{subst}}}#expr:2*{{{p|3}}}}} si la llamada de sustitución tiene un parámetro
subst=subst:
.
Compárese:
{{uc:2*{{{p}}}}}
→2*{{{P}}}
{{uc:2*{{{p|q}}}}}
→2*Q
{{subst:uc:2*{{{p|q}}}}}
→ el wikitexto 2*{{{P|Q}}} representado como 2*Q
y también (a partir de lo anterior):
{{subst:UC:{{subst:tc}}}}
- devuelve IN, al igual que hace {{UC:{{tc}}}}; UC se aplica a la salida «in» de Tc.{{subst:UC:{{tc}}}}
- devuelve el wikitexto{{TC}}
, representado como the current page's transclusion count.
En la sustitución de UC
, la etiqueta de inclusión {{tc}} se trata como una cadena, al igual que {{{p|q}}}.
Sustitución parcial
Dentro de una plantilla ordinaria, se puede aplicar la sustitución a una llamada a una plantilla ordinaria que contenga un parámetro para reemplazarla por el wikitexto directo que contenga el parámetro. Esto se resume en fusionar automáticamente las dos plantillas (creando una «plantilla compuesta» como función compuesta). No es posible si la plantilla interna y/o la externa está predefinida. (Sin embargo, fusionar a mano, p. ej., una llamada de #expr dentro de otra es útil para aumentar la precisión del resultado evitando el redondeo intermedio a 12 cifras.)
De esta manera, se puede evitar la técnica de sustitución opcional descrita a continuación y aplicar la sustitución de la plantilla externa resultante utilizando sencillamente subst:
(salvo que haya más niveles de anidamiento).
Ejemplo:
{{subst:t}}
- devuelve el wikitextostart-{{{1|pqr}}}-end
, simplemente el de m:Template:t, sin las partes noinclude y las etiquetas includeonly{{subst:t|a{{{p|q}}}b}}
- devuelve el wikitextostart-a{{{p|q}}}b-end
Ejemplos con doble sustitución:
{{subst:3X|{{subst:t}}}}
- devuelve el wikitextostart-{{{1|pqr}}}-endstart-{{{1|pqr}}}-endstart-{{{1|pqr}}}-endstart-{{{1|q}}}-end
{{subst:3X|{{subst:t|{{{1|q}}}}}}}
- devuelve el wikitextostart-{{{1|q}}}-endstart-{{{1|q}}}-endstart-{{{1|q}}}-end
Sustitución multinivel
Al sustituir una plantilla, puede ser deseable realizar también una sustitución dentro de ella.
Esto se puede hacer utilizando safesubst:
en la plantilla.
Para evitar una sustitución prematura (es decir, al guardar la plantilla), es posible añadir la directiva <noinclude />
después de la directiva de sustitución – es decir, safesubst:<noinclude />
.
Otra solución es utilizar el valor predeterminado de un parámetro no utilizado.
A menudo funciona la cadena vacía, es decir, {{{|safesubst:}}}
, sin embargo, a veces se utiliza en módulos que llaman a plantillas o para introducir comentarios.
La diferencia con subst:<noinclude />
es que safesubst:<noinclude />
, que se evalúa a safesubst:
, no solo permite la sustitución multinivel sino también la transclusión multinivel, ya que en la transclusión se ignora.
Para hacer que la plantilla permita elegir entre estas dos opciones así como la sustitución de un nivel (y más opciones si se implica a más plantillas, variables y/o funciones del analizador), hace falta uno o más parámetros, véase a continuación.
Sustitución multinivel con control independiente de cada sustitución por separado
Se puede utilizar un subst con parámetro (o más de uno, cada uno con su propio nombre), con safesubst:
y la cadena vacía como valores posibles.
Así, por ejemplo, podemos controlar si al sustituir una plantilla externa se sustituye también una plantilla interna.
Se puede establecer cualquiera de estas posibilidades como la predeterminada.
Las plantillas internas con parámetros pueden controlar nuevas sustituciones internas de la misma manera; dichos parámetros pueden depender de que el parámetro de sustitución controle la sustitución de la plantilla interna, dado que, si esta no se sustituye, las sustituciones internas dentro de esa plantilla no serán posibles.
De forma análoga, si hay varias plantillas, variables y/o funciones del analizador en la o las plantillas internas, podemos controlar la sustitución de todas, ya sea de forma independiente mediante distintos parámetros, y haciendo que varias o incluso todas utilicen el mismo parámetro.
Por ejemplo, si la plantilla T
utiliza el parámetro subst1
:
- con la cadena vacía por defecto,
T
llama a las plantillas y funciones del analizador internas prefijando sus nombres con {{{subst1|}}}; para llamar aT
podemos utilizar:- {{t|..}} - sin sustitución
- {{subst:t|..}} - con sustitución de un nivel
- {{subst:t|subst1=subst:|..}} - con sustitución de dos niveles
- {{subst:t|subst1=safesubst:|..}} - ídem
- con "safesubst:" por defecto,
T
llama a las plantillas y funciones del analizador internas prefijando sus nombres con {{{subst1|safesubst:}}}; para llamar aT
podemos utilizar:- {{t|..}} - sin sustitución
- {{subst:t|subst1=|..}} - con sustitución de un nivel
- {{subst:t|..}} - con sustitución de dos niveles
Para transferir la elección de sustituir o no a las plantillas y funciones del analizador llamadas en el interior de las plantillas internas de T
, podemos añadir a la llamada a estas plantillas internas algo de la forma subst2={{{subst1|}}} o subst2={{{subst1|safesubst:}}}, respectivamente (las variables y las funciones del analizador no obtienen el parámetro adicional).
Sustitución parcial
Utilizar una plantilla preparada para un subst=subst:
opcional solo con sustitución ordinaria, sin especificar valores de parámetros, permite insertar su código en otra plantilla, como en una acción de copiar y pegar, pero suprimiendo todas las partes <noinclude>
y todas las palabras clave <includeonly>
.
Ejecutar el código insertado en lugar de llamarlo puede ser más eficiente para el servidor.
Un ejemplo típico de esta técnica es la expansión, dentro de otra plantilla, de una plantilla utilizada como expresión de prueba en un #switch: como m:Template:len.
- Código de desarrollo:
{{#switch: {{len|parameter tag}}|0=case 0 etc.}}
- Solución estándar:
{{{{{subst|}}}#switch: {{{{{subst|}}}len|parameter tag|subst={{{subst|}}}}}|0=case 0 etc.}}
- Solución mejorada: crear el código de la platilla aplicando sustitución mediante este wikitexto:
{{{{{subst|}}}#switch: {{subst:len|parameter tag}}|0=case 0 etc.}}
m:Template:len está preparado para la sustitución opcional, por lo que ambas soluciones funcionan, pero la última solución con sustitución de su código es más sencilla y eficiente.
Véanse m:Template:csn y m:Template:lz12 para casos en los que se sustituyó Template:len
de esta manera.
Si una plantilla utiliza un parámetro cuyo nombre es una expresión que contiene una plantilla o función del analizador, y se llama a la plantilla con una definición de parámetro correspondiente (en cuanto al nombre final del parámetro), se expandirá adecuadamente solo si, en el momento de la expansión de la plantilla, la expresión del nombre del parámetro es o ha sido evaluada. Así, si se sustituye la plantilla sin sustituir la expresión del nombre del parámetro, se «pierde» la definición del parámetro, por lo que el parámetro se queda indefinido. Por tanto, en un caso así, la no sustitución puede generar el mismo resultado que la sustitución completa, mientras que la sustitución parcial generará un resultado diferente. Véase, p. ej., m:Template:ts1.
Operaciones compuestas
Mediante {{A|{{B|p}}}}
se llama a una plantilla A
con, como parámetro, una llamada a una plantilla B
con un parámetro p
.
Podríamos integrar llamadas así a plantillas a una sola llamada {{C|p}}
de una «función compuesta» C
con el parámetro p
.
- El wikitexto de la plantilla
C
sería{{A|{{B|{{{1}}}}}}}
, o con sustitución opcional la siguiente construcción - :
- {{ {{{subst
|
}}} A|{{ {{{subst|
}}} B|{{{1}}} |subst={{{subst|
}}} }} |subst={{{subst|
}}} }} - El
subst={{{subst|}}}
solo es necesario para la sustitución recursiva, como ya se explicó anteriormente.
Nótese que no es útil especificar {{subst|subst:}}
ya que, en la fase de sustitución, esta etiqueta no se reduce al valor predeterminado subst:
.
Si A
y/o B
está predefinido, la construcción es similar, pero sin subst={{{subst|}}}
para esa plantilla.
includeonly
Un método alternativo para evitar una sustitución prematura, conocido en inglés como includeonly subst magic («sustitución mágica mediante includeonly»), conlleva el uso de un par de etiquetas includeonly.
Se evita la sustitución si la llamada a la plantilla está dentro de dichas etiquetas.
También se evita la sustitución al tener una o ambas etiquetas en cualquier parte de la llamada a la plantilla excepto dentro de una definición de parámetro.
Así, la o las etiquetas pueden estar antes, dentro o después de safesubst:
o subst:
, o dentro o después del nombre de la plantilla.
La posición de las dos etiquetas solo afecta a la representación de la propia página de la plantilla.
La forma {{safesubst:algo}}
sugiere que se impide la sustitución porque se ha descartado safesubst:
en la propia página, pero en realidad el motivo es que la sintaxis safesubst fue perturbada por las etiquetas.
No sustituye «algo» en el momento de la creación de la plantilla correspondiente, pero tiene el efecto deseado cuando se sustituye la plantilla.
Para ver ejemplos, véase «preload» en Extension:InputBox y «sustitución» en Ayuda:Palabras mágicas .
Crear una página que realiza la sustitución en el próximo guardado
Véase Manual:Conversión recursiva de wikitexto .
Sustitución forzada
Algunas plantillas se niegan a funcionar deliberadamente sin sustitución; a modo de ejemplo, véase $1. This technique is essential for templates producing timestamps of the time they were (first) called, e.g. to display them (like the English Wikipedia’s Proposed deletion and CURRENTISOTIME templates) or add including pages to dated categories.
- El siguiente código en cualquier plantilla
T
devuelve como salida un aviso a menos que esté en vigor la sustitución recursiva consubst=subst:
.: {{{{{subst|}}}ifdef|{{{{{subst|subst:}}}ns:0}}|'''Warning'''}}
.- Salida para
{{T}}
o{{subst:T}}
- Warning - Salida para
{{T|subst=subst:}}
-Warning
- Salida para
{{subst:T|subst=subst:}}
- nada (sin wikitexto restante)
- Salida para
- Este es un raro caso en el que reemplazar
ifdef
por#if:
no funciona directamente.
Sustitución de parte de los parámetros
Deja que la plantilla Feelings
utilice los parámetros 1 y 2.
Considera la creación de una plantilla Emotions con un parámetro 1, correspondiente a Feelings
, con un valor dado love
del parámetro 2.
Compara {{Feelings|2=love}}
y {{Feelings|1={{{1}}}|2=love}}
.
Tienen el mismo aspecto en la página de la plantilla, véase p. ej. m:Template:t ps
, pero el primero no funciona porque {{{1}}}
es evaluado como texto y no como parámetro.
Sin embargo, con la sustitución (utilizando subst:
o Special:Expandtemplates), el wikitexto resultante es el mismo, sin distinción entre un texto {{{1}}} y un parámetro de todas formas, por lo que no es necesario 1={{{1}}}
.
Si Feelings
contiene, p. ej., #expr
con una expresión que contenga ambos parámetros, lo mismo ocurre, salvo que solo podemos sustituir el nivel más alto (Feelings
), no la función del analizador, por lo que no podemos utilizar Special:Expandtemplates
.
En general, sustituir un parámetro y aplicar una plantilla o función del analizador a veces devuelve el mismo resultado que sustituir la plantilla o función del analizador con el código del parámetro entre triples llaves y luego sustituir el parámetro.
Sin valores predeterminados (todos representados de la misma forma en una sustitución en un solo paso que sin sustitución):
Ejemplos con igualdad:
- Plantilla
Feelings
que contieneWith {{{1}}} one can {{{2}}}
- Al sustituir mediante
1=love
y2=help
, devuelveWith love one can help
. - Al sustituir mediante
2=help
, devuelveWith {{{1}}} one can help
. Esto mismo, al sustituirlo mediante1=compassion
, devuelveWith compassion one can help
.
- Al sustituir mediante
- Sustitución de dos niveles de una plantilla que contiene
{{#if:{{{4}}}|{{{3}}}p}}
.- Al sustituir mediante
3=u
y4=v
, devuelveup
. - Al sustituir mediante
4=v
, devuelve{{{3}}}p
. Esto mismo, al sustituirlo mediante3=u
, devuelveup
.
- Al sustituir mediante
Ejemplos sin igualdad:
- Sustitución de dos niveles de una plantilla que contiene
{{#if:{{{3}}}|{{{4}}}p}}
.- Al sustituir mediante
3=
y4=v
, devuelve la cadena vacía. - Al sustituir mediante
4=v
, devuelvevp
. Esto mismo, al sustituirlo mediante3=u
, permanece comovp
.
- Al sustituir mediante
- Sustitución de dos niveles de una plantilla que contiene
{{#if:{{{2}}}|{{{1}}}p}}
.- Al sustituir mediante
1=u
y2=v
, devuelveup
. - Al sustituir mediante
2=v
, devuelve{{{1}}}pp
(el error). Esto mismo, al sustituirlo mediante3=u
, devuelveupp
.
- Al sustituir mediante
- Sustitución de dos niveles de una plantilla que contiene
{{#expr:{{{1}}}*{{{2}}}}}
.- Al sustituir mediante
1=7
y2=8
, devuelve56
. - Al sustituir mediante
2=8
, devuelve Expression error: Unrecognised punctuation character "{". Esto mismo, al sustituirlo mediante1=7
, permanece igual.
- Al sustituir mediante
Así, sin igualdad, podemos (o no) obtener un mensaje de error.
Un ejemplo muestra que la sustitución de un parámetro puede estar afectada por el error mencionado anteriormente.
Sin embargo, podemos reemplazar, p. ej., {{{1}}}
por {{{1{{{{{substvoid|}}}void}}}}}
y hacer una sustitución completa, salvo que substvoid
está indefinido, impidiendo que se produzca el error.
El resultado ya funciona correctamente con la transclusión.
Por lo tanto, se puede sustituir mediante substvoid=subst:
para obtener un simple {{{1}}}
.
Con los valores predefinidos:
Se genera igual que sin sustitución:
- La sustitución de dos niveles de una plantilla que contiene
With {{{1|love}}} one can {{{2}}}
mediante2=help
devuelveWith {{{1|love}}} one can help
. - La sustitución de dos niveles de una plantilla que contiene
{{#if:{{{4}}}|{{{3|d}}}p}}
mediante4=v
devuelvedp
.
No se genera igual que sin sustitución:
- La sustitución de dos niveles de una plantilla que contiene
{{#if:{{{3|}}}|{{{4}}}p}}
mediante4=v
devuelvevp
. - La sustitución de dos niveles de una plantilla que contiene
{{#if:{{{2}}}|{{{1|d}}}p}}
mediante2=v
devuelvedpp
(el error). - La sustitución de dos niveles de una plantilla que contiene
{{#expr:{{{1|6}}}*{{{2}}}}}
mediante2=8
devuelve: Expression error: Unrecognised punctuation character "{"
Después de la sustitución por la definición del parámetro:
{{subst:#if:{{{3|}}}|vp}}
→vp
{{subst:#if:v|{{{1|d}}}p}}
→dpp
(el error){{subst:#expr:{{{1|6}}}*8}}
→ Expression error: Unrecognised punctuation character "{"
Reescrito:
{{subst:#if:{{subst:#ifeq:{{{3|+}}}|{{{3|-}}}|vp}}}}
→ la cadena vacía{{subst:#if:v|{{subst:#ifeq:{{{1|+}}}|{{{1|-}}}|{{{1}}}|d}}p}}
→dp
{{subst:#expr:{{subst:#ifeq:{{{1|+}}}|{{{1|-}}}|{{{1}}}|6}}*8}}
→48
Limitaciones
La sustitución no está disponible entre etiquetas del analizador como <ref>...</ref>
y <gallery>...</gallery>
.
Si escribes {{subst:foo}}
, no se sustituirá ni se transcluirá, sino que permanecerá tal cual.
Documentar la sustitución
El uso de una plantilla mediante subst:
no se muestra automáticamente en los historiales de las páginas.
Por 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 aparecen en los retroenlaces, y la plantilla no aparece en la lista de plantillas transcluidas en la página de edición. La plantilla podría añadir las páginas a una categoría para vigilar las sustituciones, pero listar esta categoría en una página puede añadir ruido a la lista de categorías basadas en el contenido a las que pertenece la página. Además, los comentarios fuera de las etiquetas noinclude están incluidos en el wikitexto. Así, se puede utilizar un comentario para mencionar la plantilla. Incluso puede contener los valores de los parámetros, dado que la sustitución de parámetros también funciona en los comentarios.
Véase también
- Help:Substitution/tl;dr – tl;dr
- w:Help:Substitution (Ayuda:Sustitución)
- The safesubst: modifier (El modificador safesubst:)
- w:Wikipedia:Template substitution (Wikipedia:Sustitución de plantillas) – mitad técnico, mitad política
- Phabricator:T4003 – solicitud de una funcionalidad para permitir marcar que una plantilla está siendo sustituida sin
subst:
- Las plantillas que contienen una llamada a sí mismas con
subst:
y que producen una llamada similar con información actualizada, ya sea reemplazando o añadiendo a la información anterior: - El truco de la pleca, que se comporta de forma similar a la sustitución de plantillas