Realiza una donación a la Enciclopedia Colchagüina para poder preservarla
Realiza una donación a la Enciclopedia Colchagüina para poder preservarla

Ayuda:Sustitución

De la Enciclopedia Colchagüina
PD Nota: Los contenidos de esta página se encuentran bajo la licencia CC0, y han sido importados desde MediaWiki.org. Estas páginas están disponibles aquí a modo informativo, y puede que algunas se encuentren en el idioma inglés.
Algunas antiguas revisiones de esta página se encontraban bajo la licencia CC BY-SA. Solo las nuevas contribuciones son de dominio público.
PD

Sustitución es la conversión automática de wikitexto de una página cuando se guarda, en el caso de que el wikitexto se refiera a uno o más plantillas, variables, o funciones de análisis.

En el caso de la sustitución de plantillas, la llamada a la plantilla se reemplaza por el contenido de la plantilla con la sustitución de los parámetros. Así, una plantilla se utiliza como macro (una abreviatura relativamente amigable para los humanos de una entrada compleja a un programa de computadora) y la página se expande como macro (el código fuente, ensamblador u otro lenguaje, creado mediante la interpretación de una macro) cuando se guarda la página en lugar de, como suele suceder, cuando se visualiza la página.

En el caso de la sustitución de una variable o función de análisis, la referencia a ella se reemplaza por el valor resultante.

La sustitución se realiza colocando 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, consulta abajo.

El resultado (en forma de diferencia con el wikitexto guardado) se puede ver antes (o sin) guardar presionando "Mostrar cambios". Sin embargo, si el texto abarca más de un párrafo, esta página de diferencia no es muy adecuada para copiar el resultado (por ejemplo, para la sustitución paso a paso sin guardar en cada paso), debido a los signos de más en el margen.

Aplicaciones

Sustitución de una plantilla:

  • Hacer una página rendereada independiente de la plantilla:
    • La página rendereada no cambia cuando se edita la plantilla.
    • La página se puede copiar a otro wiki de MediaWiki sin copiar la plantilla.
  • Facilitar la representación de la página y, por lo tanto, acelerar el servidor.
  • Analizar y demostrar el funcionamiento de las plantillas. Sin embargo, en algunos casos, la sustitución funciona de manera diferente.
  • Facilitar la comprensión de la correspondencia entre el wikitexto y la página renderizada (esto puede aplicarse, también puede aplicarse lo contrario).

Sustitución de una variable dependiente del tiempo:

  • Hacer una página rendereada independiente del tiempo.

Sustitución de una variable dependiente de la página:

  • Hacer una página rendereada independiente de cambiar el nombre de la página y de copiar el wikitexto a otra página (lo contrario se aplica si la variable PAGENAME se usa en una parte no incluida de la página para incluir la página misma).

Algunas extensiones de MediaWiki tienen la restricción de que si se usan en una plantilla con parámetros, solo funcionan si la plantilla es sustituida.

Visión general

Para la discusión de la sustitución, una "plantilla ordinaria" es la página a la que se hace referencia en el patrón {{subst:nombre de la página }} (para páginas en el espacio de nombres de la plantilla) o {{subst:nombre de la página completa }} (para páginas en otros espacios de nombres). Una "plantilla predefinida" es una variable o función de análisis que se sustituye de manera similar.

La sustitución es un proceso separado que se realiza antes de la expansión de cualquier plantilla, variable, función de análisis o parámetro no sustituido.

Una llamada de sustitución puede tener otras llamadas de sustitución incrustadas en ella. De manera similar, la plantilla sustituida de una sustitución puede contener otras llamadas de sustitución. Las sustituciones en la expresión del nombre de la plantilla o función de análisis, en las definiciones de parámetros de la plantilla o función de análisis sustituidos y en el cuerpo de la plantilla sustituida se realizan primero.

Dado que la expansión se realiza más tarde, cualquier expresión utilizada en una sustitución que contenga pares de llaves dobles tendrá las llaves tratadas como texto plano. Así, durante la sustitución puede haber un nombre de parámetro con llaves en la llamada de sustitución (por ejemplo, {{subst:foo|a{{bc}}d=...}}) que coincida con un parámetro con el mismo nombre en el cuerpo de la plantilla (por ejemplo, {{{a{{bc}}d}}}).

Si se intenta aplicar la sustitución a una plantilla u otro elemento que no existe, no hay sustitución, el prefijo "subst:" se mantiene en el wikitexto.

Después del proceso de sustitución, la expansión de plantillas, etc., y otros procesamientos del wikitexto resultante funcionan como de costumbre. Debido a que la sustitución ha terminado, esto no puede deshacer una falta de coincidencia de nombres de parámetros que ocurrió durante la sustitución (ver también la sección "Sustitución parcial" a continuación).

La sustitución solo es posible si lo siguiente se ha evaluado completamente:

  • el nombre de la plantilla, variable o función de análisis
  • en el caso de una plantilla: los nombres de parámetros en la llamada de la plantilla y en la plantilla misma
  • en el caso de #if, #ifexpr, #ifexist y #iferror, el parámetro después de los dos puntos
  • en el caso de #ifeq, el parámetro después de los dos puntos y el siguiente
  • en el caso de #switch, el parámetro después de los dos puntos y las expresiones a la izquierda de los signos de igual

Dado que, como se dijo, la sustitución se realiza antes de la expansión de otros elementos, la evaluación requerida anteriormente no ha tenido lugar si las expresiones involucran una expansión no sustituida.

También en el caso de otras funciones de análisis que no se mencionan, un parámetro no completamente evaluado después de los dos puntos hace que la función de análisis se aplique al wikitexto con llaves y no al wikitexto expandido, afectando el resultado.

Ejemplos:

  • {{subst:Help:L{{tc}}k}} utilizando Template:tc, no realiza sustitución, porque Help:L{{tc}}k no es una página existente, aunque Help:L{{tc}}k se renderiza como Help:Link. Por lo tanto, el wikitexto resultante es el mismo que el wikitexto original y se renderiza como {{subst:Help:Link}}.
  • {{#if:{{void|abc}}|sí|no}} (usando Template:void) se renderiza como "no", y así {{subst:#if:{{subst:void|abc}}|sí|no}} da el wikitexto "no". Por otro lado, {{subst:#if:{{void|abc}}|sí|no}} da el wikitexto "sí", porque Template:void no se resuelve hasta después de la sustitución.

En principio, el wikitexto resultante de la sustitución completa se renderiza de inmediato de la misma manera que el wikitexto con inclusión ordinaria.

Sin embargo, tenga en cuenta que en la sustitución de una función de análisis, un parámetro no definido con un valor predeterminado, utilizado en un valor de parámetro, no se reemplaza por la predeterminada (en la 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}}}}} da 6, mientras que {{subst:#expr:2*{{{p|3}}}}} da "Error de expresión: carácter de puntuación no reconocido "{"". En la sustitución de una plantilla que contiene esto, {{{p|3}}} se reemplaza por el valor de {{{p}}} o por 3, por lo que entonces no hay complicaciones.

{{ {{t6}} }} utilizando Plantilla:t6 conteniendo "t2demo|a" se renderiza como {{ t2demo|a }}; {{subst:{{subst:t6}} }} da el wikitexto {{subst:t2demo|a }} renderizado de la misma manera que el wikitexto, y en la siguiente edición se cambia a start-a -middle-{{{2}}}-end; {{ {{subst:t6}} }} da el wikitexto {{ t2demo|a }}, renderizado como start-a -middle-{{{2}}}-end. Esto se debe a que, tanto sin sustitución como en el caso de la sustitución completa, los caracteres de barra vertical en las llamadas a plantillas, excluyendo aquellos dentro de llamadas internas de plantillas, parámetros de plantillas, enlaces y etiquetas de imágenes, determinan la separación de las definiciones de parámetros entre sí y del nombre de la plantilla. Esta separación no depende de los posibles caracteres de barra vertical adicionales en la forma expandida del nombre de la plantilla y las definiciones de parámetros. Sin embargo, si después de la sustitución de una plantilla interna el carácter de barra vertical está en la llamada de la plantilla externa, es como cualquier otro y desempeña su papel en la determinación de la separación. En otras palabras, el análisis se realiza primero una vez para la sustitución y luego una vez para el renderizado, pero en ambos casos no hay una vez extra en el medio. En el caso de la sustitución de la plantilla interna solamente, son efectivos dos análisis sucesivos.

Al sustituir una plantilla que contiene {{{p|q}}} (una etiqueta de parámetro con valor predeterminado), esto resulta en el valor de p si está definido y, de lo contrario, en q. Por ejemplo, usando [[w:Template:Timc|Plantilla:Timc]] (en la Wikipedia en inglés), {{subst:t pd}} da el wikitexto 2.

Si una página se sustituye a sí misma (por ejemplo, en la parte de noinclude de una página de plantilla), sustituye la versión anterior.

Consideraciones de uso

Como se mencionó, un cambio en una plantilla ordinaria después de la sustitución no afecta a la página en la que se sustituyó, y una variable sustituida que depende del tiempo ya no depende del tiempo, etc. Sin embargo, una sustitución de, por ejemplo, {{#expr:2*3}} no afecta en absoluto al renderizado.

La relación entre el wikitexto de una página y su renderizado puede volverse más fácil de entender después de la sustitución, porque se tiene todo el wikitexto juntos y las sustituciones de parámetros se han realizado.

También puede volverse más complejo. Centrarse por separado en entender una llamada de plantilla y entender el contenido de la plantilla puede ser más fácil. El wikitexto después de la sustitución a menudo es más complejo que cuando el wikitexto requerido se habría escrito directamente.

A diferencia de una llamada de plantilla (si se conocen las plantillas), el wikitexto después de la sustitución no muestra cómo se puede producir un resultado similar. El wikitexto puede ser largo y complicado, y por lo tanto incómodo de escribir directamente, o puede ser simple, por ejemplo, un número resultante de un cálculo, pero incómodo de encontrar directamente. Al estudiar el wikitexto de una página, uno puede pensar que este wikitexto es lo que se supone que debe escribir y encontrar directamente para obtener el resultado, incluso en casos donde eso sería muy impráctico.

En tales casos, la documentación de la llamada de la plantilla es útil. Al igual que en la programación de computadoras 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 de las plantillas y/o las plantillas, en lugar de cambiar directamente el wikitexto resultante de la sustitución.

Plantillas ordinarias

En el caso de sustituir una plantilla ordinaria, la etiqueta de la plantilla se reemplaza por el wikitexto de la plantilla, con los valores de los parámetros sustituidos por los parámetros.

Ejemplo
m:Template:t2, que contiene
start-{{{1}}}-middle-{{{2}}}-end
y se llama como {{subst:t2|[[a]]|{{tc}}}} (ver {{tc}}) da el wikitexto:
start-[[a]]-middle-{{tc}}-end, que se renderiza como
start-a-middle-in-end.

La sustitución elimina las partes de noinclude y las etiquetas de includeonly.

Parámetros:

  • Una sustitución con p=r reemplaza {{{p}}} y {{{p|q}}} por r; esto incluye los casos en que r tiene la forma {{{s}}} o {{{s|t}}}.
  • Una sustitución con p indefinido conserva {{{p}}} y reemplaza {{{p|q}}} por la predeterminada q (en la Wikipedia en inglés).

Con "subst:", el reemplazo de una etiqueta de plantilla por wikitexto no funciona de forma recursiva. Para una sustitución recursiva completa, use Special:ExpandTemplates. Consulte también substall y sustitución multinivel a continuación.

La sustitución paso a paso de plantillas que incluyen otras plantillas que incluyen más plantillas, etc., puede ser útil para analizar y documentar el comportamiento de plantillas complejas, para un ejemplo, consulte m:Template talk:Lop.

Sin embargo, después de una sustitución, una página puede renderizarse de manera diferente, por ejemplo, si las plantillas producen llaves, barras verticales y/o signos de igual que después de la sustitución determinan la expansión de otras plantillas, pero sin sustitución se tratan como texto simple.

En ausencia de parámetros, la sustitución de plantillas se puede comparar con copiar el wikitexto o el renderizado de una inclusión de {{ msgnw:pagename }} previsualizada o guardada. Sin embargo, la sustitución de plantillas excluye las partes de <noinclude>, elimina las etiquetas de <includeonly> y reemplaza los parámetros no definidos por sus valores predeterminados.

Plantillas predefinidas

En el caso de sustituir una plantilla predefinida, sin parámetros que dependan de otras plantillas, la etiqueta se reemplaza por el resultado.

Nota: subst: debe agregarse directamente antes del nombre de la plantilla predefinida sin espacios intermedios.

Aplicar subst a una variable funciona como aplicarlo a una plantilla. Por ejemplo, una marca de tiempo:

{{subst:CURRENTYEAR}}-{{subst:CURRENTMONTH}}-{{subst:CURRENTDAY}} T {{subst:CURRENTTIME}} [[w:UTC|]]

puede dar el wikitexto

2010-04-10 T 06:30 [[w:UTC|UTC]], que se renderiza como
2010-04-10 T 06:30 UTC.

En el caso de sustituir una plantilla predefinida con un parámetro que depende de otra plantilla, eso también debe sustituirse, con un modificador subst: separado, de lo contrario el resultado es indefinido.

  • {{subst:UC:{{subst:tc}}}} da IN, el mismo wikitexto que {{UC:{{tc}}}} se expande a; UC: se aplica a la salida "in" de Tc.

{{subst:ns:{{subst:#expr:23}}}} da File. {{ns:{{subst:#expr:23}}}} da el wikitexto {{ns:6}} renderizado como Archivo.

  • {{subst:t1|{{subst:NAMESPACE}}}} da el wikitexto startHelpend (ver {{t1}})

{{subst:t1|{{subst:#expr:34}}}} da el wikitexto start12end

  • {{subst:t1|{{subst:uc:AbCdEf}}}} da el wikitexto startABCDEFend

{{subst:#expr:2{{subst:CURRENTDAY}}}} da (en el momento de la escritura) el wikitexto 30

  • {{subst:UC:{{subst:CURRENTDAYNAME}}}} da (en el momento de la escritura) el wikitexto THURSDAY

Sin embargo:

  1. {{subst:UC:{{tc}}}} da el wikitexto {{TC}} renderizado como in.
  2. {{subst:ns:{{#expr:23}}}} se queda {{subst:ns:{{#expr:23}}}}, renderizado como {{subst:ns:6}} (ver ns:).

Como se mencionó anteriormente, en la sustitución, todas las llamadas sin sustitución de plantillas, variables y funciones de análisis se tratan como texto simple. Como resultado, la sustitución de la x: externa en un anidado {{ x:...{{ y:...}} }} a menudo es adecuada solo si todas las y: internas también se sustituyen.

En el caso de la sustitución de una plantilla predefinida, si la expresión para uno de sus parámetros contiene {{{p|3}}} con p indefinido, este código se reduce a 3. Sin embargo, en la página en sí, {{{p|3}}} se trata como tal, no como 3.

Ejemplos: {{#expr:2{{{p}}}}} da Error en la expresión: no se reconoce el carácter de puntuación «{». {{#expr:2{{{p|3}}}}} da 6 {{subst:#expr:2{{{p|3}}}}} da Error de expresión: Carácter de puntuación no reconocido "{". sustituir una plantilla que contiene {{<includeonly>subst:</includeonly>#expr:2{{{p|3}}}}} da 6 si p no tiene asignado un valor, y el doble del número p si sí tiene un valor. el mismo resultado se puede obtener de una plantilla que contiene {{{{{subst}}}#expr:2{{{p|3}}}}}, si la llamada de sustitución tiene un parámetro de "subst=subst:".

Comparar: {{uc:2{{{p}}}}} da 2*{{{P}}} {{uc:2{{{p|q}}}}} da 2*Q {{subst:uc:2{{{p|q}}}}} da el wikitexto 2*{{{P|Q}}} renderizado como 2*Q

y también (de arriba):

  • {{subst:UC:{{subst:tc}}}} da IN, al igual que {{UC:{{tc}}}}; UC se aplica a la salida "in" de Tc.
  • {{subst:UC:{{tc}}}} da el wikitexto {{TC}} renderizado como in.

En la sustitución de UC, la etiqueta de inclusión {{tc}} se trata como cadena al igual que {{{p|q}}}.

Sustitución parcial

Dentro de una plantilla ordinaria se puede aplicar la sustitución a una llamada de plantilla ordinaria que contiene un parámetro, para reemplazarlo por el wikitexto directo que contiene el parámetro. Es equivalente a fusionar automáticamente las dos plantillas (creando una "plantilla compuesta" como una función compuesta). No es posible si la plantilla interna y/o externa es predefinida. (Sin embargo, la fusión manual, por ejemplo, de una llamada de #expr dentro de otra, es útil para aumentar la precisión del resultado al evitar el redondeo intermedio a 12 dígitos).

De esta manera, se puede prescindir de la técnica de sustitución opcional descrita a continuación y aplicar la sustitución de la plantilla externa resultante simplemente utilizando "subst:" (a menos que haya más niveles de anidación).

Ejemplo:

  • {{subst:t}} da el wikitexto start-{{{1|pqr}}}-end, igual al de m:Template:t, sin partes de noinclude y etiquetas de includeonly.
  • {{subst:t|a{{{p|q}}}b}} da el wikitexto start-a{{{p|q}}}b-end

Ejemplos con doble sustitución:

  • {{subst:3X|{{subst:t}}}} da el wikitexto start-{{{1|pqr}}}-endstart-{{{1|pqr}}}-endstart-{{{1|pqr}}}-endstart-{{{1|q}}}-end
  • {{subst:3X|{{subst:t|{{{1|q}}}}}}} da el wikitexto start-{{{1|q}}}-endstart-{{{1|q}}}-endstart-{{{1|q}}}-end

Sustitución multinivel

Al sustituir una plantilla, puede ser deseable llevar a cabo una sustitución dentro de la plantilla también. Esto se puede hacer con "safesubst:" en la plantilla. Para evitar la sustitución prematura (es decir, cuando se guarda la plantilla), este código se proporciona como valor predeterminado de un parámetro no utilizado. Dado que la cadena vacía es un posible, pero para otros propósitos, nombre de parámetro poco común, suele ser una elección adecuada para el nombre de este parámetro no utilizado, por lo que podemos usar el código {{{|safesubst:}}}.

La diferencia con {{{|subst:}}} es que {{{|safesubst:}}}, que evalúa a safesubst: si el parámetro con la cadena vacía como nombre no está definido, no solo permite la sustitución multinivel sino también la transclusión multinivel, porque en la transclusión se ignora. Para hacer que la plantilla permita la elección entre estas dos opciones, así como la sustitución de un solo nivel (y más opciones si están involucradas más plantillas, variables y/o funciones de análisis), se necesitan uno o más parámetros, consulte a continuación.

A veces, una llamada de plantilla define un valor del parámetro con la cadena vacía como nombre, solo para insertar este valor como comentario dentro de la etiqueta de la plantilla, o para el diseño de la etiqueta de la plantilla, consulte diseño de la etiqueta de la plantilla. Esto afectaría el funcionamiento del código {{{|safesubst:}}}. Para permitir este otro uso ficticio del parámetro, se puede usar otro nombre de parámetro en {{{nombre del parámetro|safesubst:}}}, o para evitar cualquier posible conflicto de nombres ficticios de parámetros, se pueden usar etiquetas includeonly, consulte a continuación.

Sustitución multinivel con control independiente de cada sustitución por separado

Se puede utilizar un parámetro subst (o más, cada uno con su propio nombre) con "safesubst:" y la cadena vacía como valores posibles. De esta manera, por ejemplo, podemos controlar si una plantilla interna también se sustituye cuando se sustituye la plantilla externa. Cualquiera de las posibilidades se puede hacer predeterminada.

Las plantillas internas con parámetros también pueden controlar más sustituciones internas de la misma manera; estos parámetros pueden depender del parámetro de sustitución que controla la sustitución de la plantilla interna, ya que si no se sustituye, las sustituciones internas dentro de esa plantilla no son posibles.

De manera similar, si hay múltiples plantillas, variables y/o funciones de análisis en la plantilla interna(s), podemos controlar la sustitución de todas, ya sea de manera independiente mediante el uso de diferentes parámetros, o con algunos o todos usando el mismo parámetro.

Por ejemplo, si la plantilla T utiliza el parámetro subst1:

  • con la cadena vacía como valor predeterminado, T llama a plantillas internas y funciones analizadoras prefixando sus nombres con {{{subst1|}}}; para llamar a T podemos usar:
    • {{t|..}} (sin sustitución)
    • {{subst:t|..}} (sustitución de un nivel)
    • {{subst:t|subst1=subst:|..}} (sustitución de dos niveles)
    • {{subst:t|subst1=safesubst:|..}} (lo mismo)
  • con el valor predeterminado "safesubst:", T llama a plantillas internas y funciones analizadoras prefixando sus nombres con {{{subst1|safesubst:}}}; para llamar a T podemos usar
    • {{t|..}} (sin sustitución)
    • {{subst:t|subst1=|..}} (sustitución de un nivel)
    • {{subst:t|..}} (sustitución de dos niveles)

Para transferir la elección de sustituir o no a las plantillas y funciones analizadoras llamadas dentro de las plantillas internas de T, podemos agregar a la llamada de estas plantillas internas algo como subst2={{{subst1|}}} o subst2={{{subst1|safesubst:}}}, respectivamente (variables y funciones analizadoras no reciben el parámetro adicional).

Ver también m:Ayuda:Cálculo#Sustitución y m:Template:Tabla de ejemplo con cálculos, con sustitución opcional.

Sustitución parcial

Usar una plantilla preparada para subst=subst: opcional solo con sustitución ordinaria, sin especificar valores de parámetros, permite insertar su código en otra plantilla, como copiar y pegar, pero todas las partes y palabras clave se eliminan automáticamente. 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 expandir, dentro de otra plantilla, una plantilla utilizada como expresión de prueba en un #switch: como m:Template:len:

  1. Código de desarrollo:
    {{#switch: {{len|etiqueta de parámetro }}|0=caso 0, etc.}}
  2. Solución estándar:
    {{{{{subst|}}}#switch: {{{{{subst|}}}len|etiqueta de parámetro |subst={{{subst|}}}}}|0=caso 0, etc.}}
  3. Mejor solución: crea el código de la plantilla aplicando sustitución usando este wikitexto:
    {{{{{subst|}}}#switch: {{subst:len|etiqueta de parámetro}}|0=caso 0, etc.}}

m:Template:len está preparada para la sustitución opcional, por lo tanto, ambas soluciones funcionan, pero la última solución sustituyendo su código es más simple y eficiente.

Consulta m:Template:csn y m:Template:lz12 para casos donde Template:len fue sustituida de esta manera.

Si una plantilla utiliza un parámetro cuyo nombre es una expresión que contiene una plantilla o una función de análisis y la plantilla se llama con una definición de parámetro correspondiente (en términos del nombre final del parámetro), se expande correctamente solo si en el momento de la expansión de la plantilla la expresión para el nombre del parámetro se ha evaluado o ha sido evaluada. Por lo tanto, si la plantilla se sustituye sin sustituir la expresión del nombre del parámetro, la definición del parámetro se "pierde", por lo que el parámetro se vuelve indefinido. Por lo tanto, en tal caso, ninguna sustitución puede dar el mismo resultado renderizado que la sustitución completa, mientras que la sustitución parcial da un resultado diferente. Consulta, por ejemplo, m:Template:ts1.

Operaciones compuestas

Por {{A|{{B|p}}}} se llama a una plantilla A con, como parámetro, una llamada a la plantilla B con un parámetro p. Podríamos integrar tales llamadas de plantilla en una sola llamada {{C|p}} de una "plantilla compuesta" C con parámetro p.

El wikitexto para la plantilla C sería {{A|{{B|{{{1}}}}}}}, o con sustitución opcional el siguiente constructo:
{{ {{{subst|}}} A|{{ {{{subst|}}} B|{{{1}}} |subst={{{subst|}}} }} |subst={{{subst|}}} }}
El sust={{{subst|}}} solo es necesario para la sustitución recursiva como se explica arriba.

Ten en cuenta 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án predefinidas, la construcción es similar, pero sin sust={{{subst|}}} para esa plantilla.

Solo incluir

Un método alternativo para evitar la sustitución prematura, conocido como "includeonly subst magic", es con un par de etiquetas includeonly. La sustitución se evita al tener la llamada de la plantilla dentro de estas etiquetas. También se evita la sustitución al tener una o ambas etiquetas en cualquier lugar de la llamada de la plantilla excepto dentro de una definición de parámetro. Por lo tanto, las etiquetas pueden estar antes, dentro o después de "safesubst:" o "subst:", o dentro o después del nombre de la plantilla. Las posiciones de las dos etiquetas solo influyen en la representación de la página de la plantilla misma.

La forma {{<includeonly>safesubst:</includeonly>something}} sugiere que la sustitución se evita al descartar "safesubst:" en la página misma, pero en realidad la sustitución se evita porque la sintaxis de safesubst se ve afectada por las etiquetas.

No sustituye "something" en el momento de la creación de la plantilla relevante, pero tiene el efecto deseado cuando se sustituye la plantilla.

Para ejemplos, consulta "preload" en Extension:InputBox y "substitution" en Ayuda:Palabras mágicas.

Crear una página que aplique sustitución en el próximo guardado

Consulta m:Help:Recursive conversion of wikitext.

Sustitución forzada

Algunas plantillas se niegan deliberadamente a funcionar sin sustitución, por ejemplo, consulta w:en:Template:en. Esta técnica es esencial para plantillas como w:en:Template:en que producen algún tipo de marca de tiempo, como agregar páginas a categorías fechadas.

El siguiente código en cualquier plantilla T emite una advertencia a menos que la sustitución recursiva con sust=subst: esté en vigor:
{{{{{subst|}}}ifdef|{{{{{subst|subst:}}}ns:0}}|'''Advertencia'''}}.
  1. Resultado para {{T}} o {{subst:T}}: Advertencia,
  2. resultado para {{T|subst=subst:}}: Plantilla:Ifdef,
  3. resultado para {{subst:T|subst=subst:}}: nada (sin wikitexto restante).
Este es un caso raro en el que reemplazar ifdef por #if: no funciona directamente.

Sustitución de parte de los parámetros

Permite que la plantilla Feelings use los parámetros 1 y 2. Considera crear 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}}. Se ven iguales en la página de la plantilla, consulta, por ejemplo, m:Template:t ps, pero el primero no funciona porque {{{1}}} se trata como texto, no como parámetro.

Sin embargo, con la sustitución (usando "subst:" o Special:Expandtemplates) el wikitexto resultante es el mismo, sin distinción entre un texto {{{1}}} y un parámetro, de todos modos es un parámetro, por lo que "1={{{1}}}" no es necesario.

Si Feelings contiene, por ejemplo, #expr con una expresión que contiene ambos parámetros, se aplica lo mismo, excepto que solo podemos sustituir el nivel más alto (Feelings), no la función de análisis, por lo que no podemos usar Special:Expandtemplates.

En general, la sustitución de un parámetro y la aplicación de una plantilla o función de análisis a veces da el mismo resultado que sustituir la plantilla o función de análisis con el código de parámetro entre corchetes triples y luego sustituir el parámetro.

Sin valores predeterminados (todos se representan de la misma manera en una sustitución de un paso como sin sustitución):

Ejemplos con igualdad:

  • La plantilla Feelings que contiene Con {{{1}}} se puede {{{2}}}, sustituida con 1=amor, 2=ayudar, da Con amor se puede ayudar; sustituida con 2=ayudar, da Con {{{1}}} se puede ayudar, la cual, sustituida con 1=compasión da Con compasión se puede ayudar.
  • La sustitución de dos niveles de una plantilla que contiene {{#if:{{{4}}}|{{{3}}}p}} con 3=u, 4=v da up; sustituida con 4=v da {{{3}}}p, la cual, sustituida con 3=u da up.

Ejemplos sin igualdad:

  • La sustitución de dos niveles de una plantilla que contiene {{#if:{{{3}}}|{{{4}}}p}} con 3=, 4=v da la cadena vacía; sustituida con 4=v da vp, la cual, sustituida con 3=u permanece vp.
  • La sustitución de dos niveles de una plantilla que contiene {{#if:{{{2}}}|{{{1}}}p}} con 1=u, 2=v da up; sustituida con 2=v da {{{1}}}pp (el error), la cual, sustituida con 3=u, da upp.
  • La sustitución de dos niveles de una plantilla que contiene {{#expr:{{{1}}}*{{{2}}}}} con 1=7, 2=8 da 56; sustituida con 2=8 da <strong class="error">Error de expresión: Carácter de puntuación no reconocido "{"</strong>, la cual, sustituida con 1=7, permanece igual.

Así que sin igualdad podemos o no obtener un mensaje de error.

Un ejemplo muestra que la sustitución de un parámetro puede verse afectada por el error mencionado anteriormente. Sin embargo, podemos reemplazar, por ejemplo, {{{1}}} por {{{1{{{{{substvoid|}}}void}}}}} y realizar la sustitución completa, excepto que substvoid no está definido, evitando el error. El resultado ya funciona correctamente con la transclusión. Posteriormente se puede sustituir con substvoid=subst: para obtener el simple {{{1}}}.

Con valores predeterminados:

Representado de la misma manera que sin sustitución:

  • La sustitución de dos niveles de una plantilla que contiene Con {{{1|amor}}} se puede {{{2}}} con 2=ayudar da Con {{{1|amor}}} se puede ayudar.
  • La sustitución de dos niveles de una plantilla que contiene {{#if:{{{4}}}|{{{3|d}}}p}} con 4=v da {{{3|d}}}p.

No representado de la misma manera que sin sustitución:

  • La sustitución de dos niveles de una plantilla que contiene {{#if:{{{3|}}}|{{{4}}}p}} con 4=v da vp.
  • La sustitución de dos niveles de una plantilla que contiene {{#if:{{{2}}}|{{{1|d}}}p}} con 2=v da {{{1|d}}}pp (el error).
  • La sustitución de dos niveles de una plantilla que contiene {{#expr:{{{1|6}}}*{{{2}}}}} con 2=8 da <strong class="error">Error de expresión: Carácter de puntuación no reconocido "{"</strong>.

Después de la sustitución con la definición del parámetro:

  • {{subst:#if:{{{3|}}}|vp}} da vp.
  • {{subst:#if:v|{{{1|d}}}p}} da dpp (el error).
  • {{subst:#expr:{{{1|6}}}*8}} da 48.

Limitaciones

La sustitución no está disponible dentro de etiquetas de análisis como <ref>...</ref> y <gallery>...</gallery>. Si escribes {{subst:foo}}, no se sustituye ni se transcluye, sino que permanece como está.

Documentación de la sustitución

El uso de una plantilla a través de subst: no aparece automáticamente en el historial 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 aparecen en los enlaces de retroceso, y la plantilla no aparece en la lista de plantillas transcluidas en la página de edición. La plantilla podría agregar páginas a una categoría para hacer un seguimiento de las sustituciones, pero listar esta categoría en una página puede llenar la lista de categorías basadas en contenido en la que se encuentra la página. Además, los comentarios fuera de las etiquetas noinclude se incluyen en el wikitexto. Así que un comentario se puede utilizar para mencionar la plantilla. Incluso puede contener los valores de los parámetros, porque la sustitución de parámetros funciona incluso en comentarios.