Diferencia entre revisiones de «Ayuda:Sustitución»

De la Enciclopedia Colchagüina
Diego Grez (discusión | contribs.)
Sin resumen de edición
Diego Grez (discusión | contribs.)
 
(No se muestran 2 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
{{PD Help Page|imported=1}}
{{PD Help Page|imported=1}}
'''Sustitución''' es la [[m:Special:MyLanguage/Help:Automatic conversion of wikitext|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 [[Special:MyLanguage/Help:Templates|plantillas]], [[Special:MyLanguage/Help:variable|variables]], o [[Special:MyLanguage/Help:parser function|funciones de análisis]].
'''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 [[ayuda:plantillas|plantillas]], [[ayuda:variable|variables]], o [[ayuda:parser functions|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.
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 [[wikt:en:macro|macro]] y la página se [[wikt:en:macro expansion|expande como macro]] cuando se guarda la página en lugar de, como suele suceder, cuando se visualiza la página.
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.
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 [[Special:MyLanguage/Help:Magic Words|palabra mágica]] '''<code>subst:</code>''' o '''<code>safesubst:</code>''' después de las dobles llaves de apertura sin espacios intermedios, como en los ejemplos: '''<code><nowiki>{{subst:FULLPAGENAME}}</nowiki></code>''' y '''<code><nowiki>{{safesubst:FULLPAGENAME}}</nowiki></code>'''.
La sustitución se realiza colocando la [[ayuda:palabras mágicas|palabra mágica]] '''<code>subst:</code>''' o '''<code>safesubst:</code>''' después de las dobles llaves de apertura sin espacios intermedios, como en los ejemplos: '''<code><nowiki>{{subst:FULLPAGENAME}}</nowiki></code>''' y '''<code><nowiki>{{safesubst:FULLPAGENAME}}</nowiki></code>'''.
El código <code>safesubst:</code> es útil en la sustitución multinivel, consulta [[#Multilevel substitution|abajo]].
El código <code>safesubst:</code> es útil en la sustitución multinivel, consulta [[#Sustitución multinivel|abajo]].


El resultado (en forma de diferencia con el wikitexto guardado) se puede ver antes (o sin) guardar presionando "Mostrar cambios".
El resultado (en forma de diferencia con el wikitexto guardado) se puede ver antes (o sin) guardar presionando "Mostrar cambios".
Línea 17: Línea 17:
Sustitución de una plantilla:
Sustitución de una plantilla:


* Hacer una página [[w:render|rendereada]] independiente de la plantilla:
* Hacer una página rendereada independiente de la plantilla:
** La página rendereada no cambia cuando se edita 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.
** La página se puede copiar a otro wiki de MediaWiki sin copiar la plantilla.
Línea 36: Línea 36:
==Visión general==
==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 {{tmpl|0={{((}}subst:$1<small> </small>{{))}}|''nombre de la página''}} (para páginas en el espacio de nombres de la plantilla) o {{tmpl|0={{((}}subst:$1<small> </small>{{))}}|''nombre de la página completa''}} (para páginas en otros espacios de nombres).
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 {{tmpl|0={{((}}subst:$1<small> </small>{{))}}|''nombre de la página''}} (para páginas en el espacio de nombres de la plantilla) o {{tmpl|0={{((}}subst:$1<small> </small>{{))}}|''nombre de la página completa''}} (para páginas en otros espacios de nombres).
Una ''"plantilla predefinida"'' es una [[Special:MyLanguage/Help:variable|variable]] o [[Special:MyLanguage/Help:parser function|función de análisis]] que se sustituye de manera similar.
Una ''"plantilla predefinida"'' es una [[ayuda:variable|variable]] o [[ayuda:parser function|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.
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.
Línea 50: Línea 50:


Después del proceso de sustitución, la expansión de plantillas, etc., y otros procesamientos del wikitexto resultante funcionan como de costumbre.
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 "[[#Partial substitution|Sustitución parcial]]" a continuación).
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|Sustitución parcial]]" a continuación).


La sustitución solo es posible si lo siguiente se ha evaluado completamente:
La sustitución solo es posible si lo siguiente se ha evaluado completamente:
Línea 108: Línea 108:
*Una sustitución con p indefinido conserva {{{p}}} y reemplaza <nowiki>{{{p|q}}}</nowiki> por la [[w:Help:Parameter default|predeterminada]] q (en la Wikipedia en inglés).
*Una sustitución con p indefinido conserva {{{p}}} y reemplaza <nowiki>{{{p|q}}}</nowiki> por la [[w:Help:Parameter default|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 [[mediazilla:2777|substall]] y [[#Sustitución multilevel|sustitución multilevel]] a continuación.
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 [[mediazilla:2777|substall]] y [[#Sustitución multinivel|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]].
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]].
Línea 130: Línea 130:
:2010-04-10 T 06:30 [[w:UTC|UTC]].
:2010-04-10 T 06:30 [[w:UTC|UTC]].


In the case of substituting a predefined template with a parameter depending on another template, that has to be substituted too, with a separate <code>subst:</code> modifier, otherwise the result is undefined.
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 <code>subst:</code> separado, de lo contrario el resultado es indefinido.


*<code><nowiki>{{subst:UC:{{subst:tc}}}}</nowiki></code> gives IN, the same wikitext as <nowiki>{{UC:{{tc}}}}</nowiki> is expanded to; [[UC:]] is applied to the output "'''in'''" of [[m:Template:Tc|Tc]].
*<code><nowiki>{{subst:UC:{{subst:tc}}}}</nowiki></code> da IN, el mismo wikitexto que <nowiki>{{UC:{{tc}}}}</nowiki> se expande a; [[UC:]] se aplica a la salida "'''in'''" de [[m:Template:Tc|Tc]].
*<code><nowiki>{{subst:ns:{{subst:#expr:2*3}}}}</nowiki></code> gives File.
<code><nowiki>{{subst:ns:{{subst:#expr:23}}}}</nowiki></code> da File.
*<code><nowiki>{{ns:{{subst:#expr:2*3}}}}</nowiki></code> gives wikitext <nowiki>{{ns:6}}</nowiki> rendered as {{ns:6}}.
<code><nowiki>{{ns:{{subst:#expr:23}}}}</nowiki></code> da el wikitexto <nowiki>{{ns:6}}</nowiki> renderizado como {{ns:6}}.
*<nowiki>{{subst:t1|{{subst:NAMESPACE}}}}</nowiki> gives the wikitext startHelpend (see {{tl|t1}})
*<nowiki>{{subst:t1|{{subst:NAMESPACE}}}}</nowiki> da el wikitexto startHelpend (ver {{tl|t1}})
*<nowiki>{{subst:t1|{{subst:#expr:3*4}}}}</nowiki> gives the wikitext start12end
<nowiki>{{subst:t1|{{subst:#expr:34}}}}</nowiki> da el wikitexto start12end
*<nowiki>{{subst:t1|{{subst:uc:AbCdEf}}}}</nowiki> gives the wikitext startABCDEFend
*<nowiki>{{subst:t1|{{subst:uc:AbCdEf}}}}</nowiki> da el wikitexto startABCDEFend
*<nowiki>{{subst:#expr:{{subst:3X|11*}}1}}</nowiki> gives the wikitext {{#expr:{{3X|11*}}1}}
<nowiki>{{subst:#expr:2{{subst:CURRENTDAY}}}}</nowiki> da (en el momento de la escritura) el wikitexto 30
*<nowiki>{{subst:UC:{{subst:3X|abc}}}}</nowiki> gives the wikitext {{UC:{{3X|abc}}}}
*<nowiki>{{subst:UC:{{subst:CURRENTDAYNAME}}}}</nowiki> da (en el momento de la escritura) el wikitexto THURSDAY
*<nowiki>{{subst:LC:{{subst:#expr:1/100000}}}}</nowiki> gives the wikitext 1e-05 (see [[LC:]])
*<nowiki>{{subst:#expr:2*{{subst:CURRENTDAY}}}}</nowiki> gives (at the time of writing) the wikitext 30
*<nowiki>{{subst:UC:{{subst:CURRENTDAYNAME}}}}</nowiki> gives (at the time of writing) the wikitext THURSDAY


However:
Sin embargo:
#<code><nowiki>{{subst:UC:{{tc}}}}</nowiki></code> gives the wikitext <code><nowiki>{{TC}}</nowiki></code> rendered as {{TC}}.
#<code><nowiki>{{subst:UC:{{tc}}}}</nowiki></code> da el wikitexto <code><nowiki>{{TC}}</nowiki></code> renderizado como {{TC}}.
#<code><nowiki>{{subst:ns:{{#expr:2*3}}}}</nowiki></code> stays <nowiki>{{subst:ns:{{#expr:2*3}}}}</nowiki>, rendered as {{subst:ns:{{#expr:2*3}}}} (see [[ns:]]).
#<code><nowiki>{{subst:ns:{{#expr:23}}}}</nowiki></code> se queda <nowiki>{{subst:ns:{{#expr:23}}}}</nowiki>, renderizado como {{subst:ns:{{#expr:2*3}}}} (ver [[ns:]]).


As mentioned before, on substitution, all calls without substitution of templates, variables, and parser functions are treated as plain text. As a result substitution of the outer <code>x:</code> in a nested
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 <code>x:</code> externa en un anidado
{{<small>&#32;</small><code>x:'''...'''</code>{{<small>&#32;</small><code>y:'''...'''</code>}}<small>&#32;</small>}} often is only suitable if all inner <code>y:</code> are also substituted.
{{<small> </small><code>x:'''...'''</code>{{<small> </small><code>y:'''...'''</code>}}<small> </small>}} a menudo es adecuada solo si todas las <code>y:</code> internas también se sustituyen.


In the case of substitution of a predefined template, if the expression for one of its parameters contains <nowiki>{{{p|3}}}</nowiki> with undefined p, this code reduces to 3. However, on the page itself, <nowiki>{{{p|3}}}</nowiki> is treated as such, not as 3.
En el caso de la sustitución de una plantilla predefinida, si la expresión para uno de sus parámetros contiene <nowiki>{{{p|3}}}</nowiki> con p indefinido, este código se reduce a 3. Sin embargo, en la página en sí, <nowiki>{{{p|3}}}</nowiki> se trata como tal, no como 3.


Examples:
Ejemplos:
*<nowiki>{{#expr:2*{{{p}}}}}</nowiki> gives {{#expr:2*{{{p}}}}}
<nowiki>{{#expr:2{{{p}}}}}</nowiki> da {{#expr:2*{{{p}}}}}
*<nowiki>{{#expr:2*{{{p|3}}}}}</nowiki> gives {{#expr:2*{{{p|3}}}}}
<nowiki>{{#expr:2{{{p|3}}}}}</nowiki> da {{#expr:2*{{{p|3}}}}}
*<nowiki>{{subst:#expr:2*{{{p|3}}}}}</nowiki> gives <strong class="error">Expression error: Unrecognized punctuation character &quot;{&quot;.</strong>
<nowiki>{{subst:#expr:2{{{p|3}}}}}</nowiki> da <strong class="error">Error de expresión: Carácter de puntuación no reconocido "{".</strong>
*substituting a template containing <nowiki>{{<includeonly>subst:</includeonly>#expr:2*{{{p|3}}}}}</nowiki> gives 6 if p is not assigned a value, and twice the number p if it ''is'' assigned a value.
sustituir una plantilla que contiene <nowiki>{{<includeonly>subst:</includeonly>#expr:2{{{p|3}}}}}</nowiki> da 6 si p no tiene asignado un valor, y el doble del número p si sí tiene un valor.
*the same result can be obtained from a template containing <nowiki>{{{{{subst}}}#expr:2*{{{p|3}}}}}</nowiki>, if the substitution call has a parameter of "<code>subst=subst:</code>".
el mismo resultado se puede obtener de una plantilla que contiene <nowiki>{{{{{subst}}}#expr:2{{{p|3}}}}}</nowiki>, si la llamada de sustitución tiene un parámetro de "<code>subst=subst:</code>".


Compare:
Comparar:
*<nowiki>{{uc:2*{{{p}}}}}</nowiki> gives {{uc:2*{{{p}}}}}
<nowiki>{{uc:2{{{p}}}}}</nowiki> da {{uc:2*{{{p}}}}}
*<nowiki>{{uc:2*{{{p|q}}}}}</nowiki> gives {{uc:2*{{{p|q}}}}}
<nowiki>{{uc:2{{{p|q}}}}}</nowiki> da {{uc:2*{{{p|q}}}}}
*<nowiki>{{subst:uc:2*{{{p|q}}}}}</nowiki> gives the wikitext <nowiki>2*{{{P|Q}}}</nowiki> rendered as 2*{{{P|Q}}}
<nowiki>{{subst:uc:2{{{p|q}}}}}</nowiki> da el wikitexto <nowiki>2*{{{P|Q}}}</nowiki> renderizado como 2*{{{P|Q}}}


and also (from above):
y también (de arriba):
*<code><nowiki>{{subst:UC:{{subst:tc}}}}</nowiki></code> gives IN, just like <nowiki>{{UC:{{tc}}}}</nowiki> does; [[Help:Parser function|UC]] is applied to the output "'''in'''" of [[m:Template:Tc|Tc]].
*<code><nowiki>{{subst:UC:{{subst:tc}}}}</nowiki></code> da IN, al igual que <nowiki>{{UC:{{tc}}}}</nowiki>; [[Help:Parser function|UC]] se aplica a la salida "'''in'''" de [[m:Template:Tc|Tc]].
*<code><nowiki>{{subst:UC:{{tc}}}}</nowiki></code> gives the wikitext <code><nowiki>{{TC}}</nowiki></code> rendered as {{TC}}.
*<code><nowiki>{{subst:UC:{{tc}}}}</nowiki></code> da el wikitexto <code><nowiki>{{TC}}</nowiki></code> renderizado como {{TC}}.


In the substitution of UC, the inclusion tag <nowiki>{{tc}}</nowiki> is treated as string just like <nowiki>{{{p|q}}}</nowiki>.
En la sustitución de UC, la etiqueta de inclusión <nowiki>{{tc}}</nowiki> se trata como cadena al igual que <nowiki>{{{p|q}}}</nowiki>.


{{anchor|Partial substitution}}
{{anchor|Partial substitution}}
==Partial substitution==
==Sustitución parcial==
Inside an ordinary template one can apply substitution to an ordinary template call containing a parameter, to replace it by the direct wikitext containing the parameter. It amounts to automatically merging the two templates (creating a "composite template" like a [[w:Function composition|composite function]]). It is not possible if the inner and/or outer template is predefined. (However, manually merging e.g. a call of #expr inside another one is useful for increasing the accuracy of the result by avoiding intermediate rounding to 12 digits.)
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 [[w:Function composition|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).


This way one can dispense with the optional substitution technique described below, and apply substitution of the resulting outer template by simply using "subst:" (unless there are more nesting levels).
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).


Example:
Ejemplo:
*<nowiki>{{subst:t}}</nowiki> gives the wikitext <nowiki>start-{{{1|pqr}}}-end</nowiki>, just that of {{tim|t}}, without noinclude parts and includeonly tags
*<nowiki>{{subst:t}}</nowiki> da el wikitexto <nowiki>start-{{{1|pqr}}}-end</nowiki>, igual al de {{tim|t}}, sin partes de noinclude y etiquetas de includeonly.
*<nowiki>{{subst:t|a{{{p|q}}}b}}</nowiki> gives the wikitext <nowiki>start-a{{{p|q}}}b-end</nowiki>
*<nowiki>{{subst:t|a{{{p|q}}}b}}</nowiki> da el wikitexto <nowiki>start-a{{{p|q}}}b-end</nowiki>


Examples with double substitution:
Ejemplos con doble sustitución:
*<nowiki>{{subst:3X|{{subst:t}}}}</nowiki> gives the wikitext <nowiki>start-{{{1|pqr}}}-endstart-{{{1|pqr}}}-endstart-{{{1|pqr}}}-endstart-{{{1|q}}}-end</nowiki>
*<nowiki>{{subst:3X|{{subst:t}}}}</nowiki> da el wikitexto <nowiki>start-{{{1|pqr}}}-endstart-{{{1|pqr}}}-endstart-{{{1|pqr}}}-endstart-{{{1|q}}}-end</nowiki>
*<nowiki>{{subst:3X|{{subst:t|{{{1|q}}}}}}}</nowiki> gives the wikitext <nowiki>start-{{{1|q}}}-endstart-{{{1|q}}}-endstart-{{{1|q}}}-end</nowiki>
*<nowiki>{{subst:3X|{{subst:t|{{{1|q}}}}}}}</nowiki> da el wikitexto <nowiki>start-{{{1|q}}}-endstart-{{{1|q}}}-endstart-{{{1|q}}}-end</nowiki>


{{anchor|Multilevel substitution}}
{{anchor|Sustitución multinivel}}
==Multilevel substitution==
==Sustitución multinivel==
When substituting a template it may be desirable to carry out a substitution inside the template too. This can be done with "safesubst:" in the template. To prevent premature substitution (i.e., when the template is saved), this code is provided as default value of an unused parameter. Since the empty string is a possible—but for other purposes uncommon—parameter name, it is usually a suitable choice for the name of this unused parameter, so we can use the code <code><nowiki>{{{|safesubst:}}}</nowiki></code>.
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 <code><nowiki>{{{|safesubst:}}}</nowiki></code>.


The difference with <code><nowiki>{{{|subst:}}}</nowiki></code> is that <code><nowiki>{{{|safesubst:}}}</nowiki></code>, evaluating to <code>safesubst:</code> if the parameter with the empty string as name is undefined, not only allows multilevel substitution but also multilevel transclusion, because on transclusion it is ignored. To make the template such that it allows the choice between these two options as well as one-level substitution (and more choices if more templates, variables, and/or parser functions are involved) one or more parameters are needed, see below.
La diferencia con <code><nowiki>{{{|subst:}}}</nowiki></code> es que <code><nowiki>{{{|safesubst:}}}</nowiki></code>, que evalúa a <code>safesubst:</code> 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.


Sometimes a template call defines a value of the parameter with the empty string as name, just for inserting this value as comment inside the template tag, or for lay-out of the template tag, see  [[Help:Templates#Template tag lay-out|template tag lay-out]]. This would affect the working of the code <code><nowiki>{{{|safesubst:}}}</nowiki></code>. To allow this other dummy use of the parameter, another parameter name can be used in <code><nowiki>{{{</nowiki>''parameter name''<nowiki>|safesubst:}}}</nowiki></code>, or to avoid any possible clash of dummy parameter names, includeonly tags can be used, see below.
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 [[Help:Templates#Template tag lay-out|diseño de la etiqueta de la plantilla]]. Esto afectaría el funcionamiento del código <code><nowiki>{{{|safesubst:}}}</nowiki></code>. Para permitir este otro uso ficticio del parámetro, se puede usar otro nombre de parámetro en <code><nowiki>{{{</nowiki>''nombre del parámetro''<nowiki>|safesubst:}}}</nowiki></code>, o para evitar cualquier posible conflicto de nombres ficticios de parámetros, se pueden usar etiquetas includeonly, consulte a continuación.


==Multilevel substitution with independent control of each substitution separately==
==Sustitución multinivel con control independiente de cada sustitución por separado==
A parameter subst (or more, each with its own name) can be used with "safesubst:" and the empty string as possible values. Thus we can for example control whether an inner template is substituted too when the outer template is substituted. Either possibility can be made the default.
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.


Inner templates with parameters may control further inner substitutions in the same way; these parameters may depend on the substitution parameter controlling the substitution of the inner template, since if that is not substituted, inner substitutions within that template are not possible.
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.


Similarly, if there are multiple templates, variables, and/or parser functions in the inner template(s) we can control substitution of all, either independently by using different parameters, or with some or all using the same parameter.
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.


For example, if template T uses parameter subst1:
Por ejemplo, si la plantilla T utiliza el parámetro subst1:
*with the empty string as default, T calls inner templates and parser functions prefixing their names with <nowiki>{{{subst1|}}}</nowiki>; for calling T we can use:
*con la cadena vacía como valor predeterminado, T llama a plantillas internas y funciones analizadoras prefixando sus nombres con <nowiki>{{{subst1|}}}</nowiki>; para llamar a T podemos usar:
**<nowiki>{{t|..}}</nowiki> (no substitution)
**<nowiki>{{t|..}}</nowiki> (sin sustitución)
**<nowiki>{{subst:t|..}}</nowiki> (one-level substitution)
**<nowiki>{{subst:t|..}}</nowiki> (sustitución de un nivel)
**<nowiki>{{subst:t|subst1=subst:|..}}</nowiki> (two-level substitution)
**<nowiki>{{subst:t|subst1=subst:|..}}</nowiki> (sustitución de dos niveles)
**<nowiki>{{subst:t|subst1=safesubst:|..}}</nowiki> (ditto)
**<nowiki>{{subst:t|subst1=safesubst:|..}}</nowiki> (lo mismo)
*with default "safesubst:", T calls inner templates and parser functions prefixing their names with <nowiki>{{{subst1|safesubst:}}}</nowiki>; for calling T we can use
*con el valor predeterminado "safesubst:", T llama a plantillas internas y funciones analizadoras prefixando sus nombres con <nowiki>{{{subst1|safesubst:}}}</nowiki>; para llamar a T podemos usar
**<nowiki>{{t|..}}</nowiki> (no substitution)
**<nowiki>{{t|..}}</nowiki> (sin sustitución)
**<nowiki>{{subst:t|subst1=|..}}</nowiki> (one-level substitution)
**<nowiki>{{subst:t|subst1=|..}}</nowiki> (sustitución de un nivel)
**<nowiki>{{subst:t|..}}</nowiki> (two-level substitution)
**<nowiki>{{subst:t|..}}</nowiki> (sustitución de dos niveles)


To transfer the choice of substituting or not to templates and parser functions called inside the inner templates of T, we can add to the call of these inner templates something of the form subst2=<nowiki>{{{subst1|}}}</nowiki> or subst2=<nowiki>{{{subst1|safesubst:}}}</nowiki>, respectively ([[Help:variable|variable]]s and [[Help:parser function|parser function]]s don't get the additional parameter).
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=<nowiki>{{{subst1|}}}</nowiki> o subst2=<nowiki>{{{subst1|safesubst:}}}</nowiki>, respectivamente ([[Ayuda:variable|variables]] y [[Ayuda:función analizadora|funciones analizadoras]] no reciben el parámetro adicional).


See also [[m:Help:Calculation#Substitution]] and {{tim|Example table with computations, with optional substitution}}.
Ver también [[m:Ayuda:Cálculo#Sustitución]] y {{tim|Tabla de ejemplo con cálculos, con sustitución opcional}}.


===Partial substitution===
===Sustitución parcial===
Using a template prepared for optional <code>subst=subst:</code> only with ordinary substitution, without specifying parameter values, allows to insert its code into another template, like copy and paste, but all
Usar una plantilla preparada para <code>subst=subst:</code> 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 {{tag|noinclude|abrir}} y palabras clave {{tag|includeonly|abrir}} se eliminan automáticamente. Ejecutar el código insertado en lugar de llamarlo puede ser más eficiente para el servidor.
{{tag|noinclude|open}} parts and {{tag|includeonly|open}} keywords automatically stripped. Executing inserted code instead of calling it may be more efficient for the server.


A typical example for this technique is expanding, within another template, a template used as test expression in a [[m:ParserFunctions#.23switch:|#switch:]] like {{tim|len}}:
Un ejemplo típico de esta técnica es expandir, dentro de otra plantilla, una plantilla utilizada como expresión de prueba en un [[m:Funciones analizadoras#.23switch:|#switch:]] como {{tim|len}}:
# Development code:<br /><code><nowiki>{{#switch: {{len|</nowiki></code>''parameter tag'' <code><nowiki>}}|0=</nowiki></code>''case 0 etc.''<code><nowiki>}}</nowiki></code>
# Código de desarrollo:<br /><code><nowiki>{{#switch: {{len|</nowiki></code>''etiqueta de parámetro'' <code><nowiki>}}|0=</nowiki></code>''caso 0, etc.''<code><nowiki>}}</nowiki></code>
# Standard solution:<br /><code><nowiki>{{{{{subst|}}}#switch: {{{{{subst|}}}len|</nowiki></code>''parameter tag'' <code><nowiki>|subst={{{subst|}}}}}|0=</nowiki></code>''case 0 etc.''<code><nowiki>}}</nowiki></code>
# Solución estándar:<br /><code><nowiki>{{{{{subst|}}}#switch: {{{{{subst|}}}len|</nowiki></code>''etiqueta de parámetro'' <code><nowiki>|subst={{{subst|}}}}}|0=</nowiki></code>''caso 0, etc.''<code><nowiki>}}</nowiki></code>
# Better solution: create template code by applying substitution using this wikitext:<br /><code><nowiki>{{{{{subst|}}}#switch: {{subst:len|</nowiki></code>''parameter tag''<code><nowiki>}}|0=</nowiki></code>''case 0 etc.''<code><nowiki>}}</nowiki></code>
# Mejor solución: crea el código de la plantilla aplicando sustitución usando este wikitexto:<br /><code><nowiki>{{{{{subst|}}}#switch: {{subst:len|</nowiki></code>''etiqueta de parámetro''<code><nowiki>}}|0=</nowiki></code>''caso 0, etc.''<code><nowiki>}}</nowiki></code>
[[m:Template:len]] is prepared for optional substitution, therefore both solutions work, but the latter solution substituting its code is simpler and more efficient.
[[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.


See [[m:Template:csn]] and [[m:Template:lz12]] for cases where Template:len was substituted in this way.
Consulta [[m:Template:csn]] y [[m:Template:lz12]] para casos donde Template:len fue sustituida de esta manera.


If a template uses a parameter whose name is an expression containing a template or parser function, and the template is called with a corresponding parameter definition (in terms of the final name of the parameter) it expands properly only if at the time of expansion of the template the expression for the name of the parameter is or has been evaluated. Thus if the template is substituted without substituting the expression for the parameter name, the parameter definition is "lost", so the parameter becomes undefined. Therefore in such a case no substitution can give the same rendered result as full substitution, while partial substitution gives a different result. See e.g. {{tim|ts1}}.
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, {{tim|ts1}}.


===Composite operations===
=== Operaciones compuestas ===
By <nowiki>{{A|{{B|p}}}}</nowiki> a template A is called with, as parameter, a call of template B with a parameter p. We could integrate such template calls to a single call <nowiki>{{C|p}}</nowiki> of a "[[w:Function composition|composite template]]" C with parameter p.
Por <nowiki>{{A|{{B|p}}}}</nowiki> 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 <nowiki>{{C|p}}</nowiki> de una "[[w:Function composition|plantilla compuesta]]" C con parámetro p.


;The wikitext for template C would be <nowiki>{{A|{{B|{{{1}}}}}}}</nowiki>, or with optional substitution the following construct&#58;
;El wikitexto para la plantilla C sería <nowiki>{{A|{{B|{{{1}}}}}}}</nowiki>, o con sustitución opcional el siguiente constructo&#58;
;<big>{{((}}<b><small>&#32;{{(((}}subst</small><code>|</code><small>{{)))}}&#32;</small></b>A|{{((}}<b><small>&#32;{{(((}}subst</small><code>|</code><small>{{)))}}&#32;</small></b>B|{{{1}}}<b><small>&#32;|subst={{(((}}subst</small><code>|</code><small>{{)))}}&#32;</small></b>{{))}}<b><small>&#32;|subst={{(((}}subst</small><code>|</code><small>{{)))}}&#32;</small></b>{{))}}</big>
;<big>{{((}}<b><small>&#32;{{(((}}subst</small><code>|</code><small>{{)))}}&#32;</small></b>A|{{((}}<b><small>&#32;{{(((}}subst</small><code>|</code><small>{{)))}}&#32;</small></b>B|{{{1}}}<b><small>&#32;|subst={{(((}}subst</small><code>|</code><small>{{)))}}&#32;</small></b>{{))}}<b><small>&#32;|subst={{(((}}subst</small><code>|</code><small>{{)))}}&#32;</small></b>{{))}}</big>
;The <b>subst=<nowiki>{{{subst|}}}</nowiki></b> is only necessary for recursive substitution as explained above.
;El <b>sust=<nowiki>{{{subst|}}}</nowiki></b> solo es necesario para la sustitución recursiva como se explica arriba.
 
Note that it is not useful to specify "<nowiki>{{subst|subst:}}</nowiki>" since in the substitution phase this tag does not reduce to the default "subst:".
 
If A and/or B is predefined the construct is similar, but without subst=<nowiki>{{{subst|}}}</nowiki> for that template.


==Includeonly==
Ten en cuenta que no es útil especificar "<nowiki>{{subst|subst:}}</nowiki>" ya que en la fase de sustitución esta etiqueta no se reduce al valor predeterminado "subst:".
An alternative method to prevent premature substitution, known as ''"includeonly subst magic"'', is with a pair of includeonly tags.  Substitution is prevented by having the template call inside these tags. Substitution is also prevented by having one or both tags anywhere in the template call except inside a parameter definition. Thus the tag(s) can be before, inside, or after "safesubst:" or "subst:", or inside or after the template name. The positions of the two tags only influence the rendering of the template page itself.


The form {{((}}<code>{{^(}}includeonly{{)^}}safesubst:{{^(}}/includeonly{{)^}}</code>something{{))}} suggests that substitution is prevented by discarding "safesubst:" on the page itself, but actually substitution is prevented because the safesubst-syntax is disturbed by the tags.
Si A y/o B están predefinidas, la construcción es similar, pero sin sust=<nowiki>{{{subst|}}}</nowiki> para esa plantilla.


It doesn't substitute ''"something"'' at the time of the creation of the relevant template, but has the desired effect when the template is substituted.
== 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.


For examples see "preload" in [[Extension:InputBox#Parameters|Extension:InputBox]] and "substitution" in [[Help:Magic_words#Transclusion_modifiers|Help:Magic words]].
La forma {{((}}<code>{{^(}}includeonly{{)^}}safesubst:{{^(}}/includeonly{{)^}}</code>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.


==Creating a page which applies substitution on the next save==
No sustituye ''"something"'' en el momento de la creación de la plantilla relevante, pero tiene el efecto deseado cuando se sustituye la plantilla.
See '''[[m:Help:Recursive conversion of wikitext]]'''.


==Forced substitution==
Para ejemplos, consulta "preload" en [[mw:Extension:InputBox#Parameters|Extension:InputBox]] y "substitution" en [[Ayuda:Palabras mágicas]].
Some templates deliberately refuse to work without substitution, for an example see {{tiw|en|Conv-dist}}.
This technique is essential for templates like {{tiw|en|prod}} producing some kind of timestamp, e.g. adding pages to dated categories.


;The following code in any template '''T''' outputs a warning unless recursive substitution with <code>subst=subst:</code> is in effect&#58;
== Crear una página que aplique sustitución en el próximo guardado ==
:<code><nowiki>{{{{{subst|}}}ifdef|{{{{{subst|subst:}}}ns:0}}|'''Warning'''}}</nowiki></code>.
Consulta '''[[m:Help:Recursive conversion of wikitext]]'''.
:#Output for {{((}}T{{))}} or {{((}}subst:T{{))}}&#58; '''Warning''',
:#output for {{((}}T|subst=subst:{{))}}&#58; {{ {{{subst|}}}ifdef|{{ {{{subst|subst:}}}ns:0}}|'''Warning'''}},
:#output for {{((}}subst:T|subst=subst:{{))}}&#58; nothing (no remaining wikitext).
;This is a rare case where replacing [[m:Template:ifdef|ifdef]] by '''#if:''' doesn't work directly.


==Substitution of part of the parameters==
== Sustitución forzada ==
Let template <code>Feelings</code> use parameters 1 and 2. Consider creating a template Emotions with one parameter 1, corresponding to Feelings, with a given value <code>love</code> of parameter 2. Compare <code><nowiki>{{Feelings|2=love}}</nowiki></code> and <code><nowiki>{{Feelings|1={{{1}}}|2=love}}</nowiki></code>. They look the same on the template page, see e.g. {{tim|t ps}}, but the first does not work because {{{1}}} is treated as text, not as parameter.
Algunas plantillas se niegan deliberadamente a funcionar sin sustitución, por ejemplo, consulta {{tiw|en|Conv-dist}}. Esta técnica es esencial para plantillas como {{tiw|en|prod}} que producen algún tipo de marca de tiempo, como agregar páginas a categorías fechadas.


However, with substitution (using "subst:" or [[Special:Expandtemplates]]) the resulting wikitext is the same, without distinction between a text {{{1}}} and a parameter, it is a parameter anyway, so "1={{{1}}}" is not needed.
;El siguiente código en cualquier plantilla '''T''' emite una advertencia a menos que la sustitución recursiva con <code>sust=subst:</code> esté en vigor&#58;
:<code><nowiki>{{{{{subst|}}}ifdef|{{{{{subst|subst:}}}ns:0}}|'''Advertencia'''}}</nowiki></code>.
:#Resultado para {{((}}T{{))}} o {{((}}subst:T{{))}}&#58; '''Advertencia''',
:#resultado para {{((}}T|subst=subst:{{))}}&#58; {{ {{{subst|}}}ifdef|{{ {{{subst|subst:}}}ns:0}}|'''Advertencia'''}},
:#resultado para {{((}}subst:T|subst=subst:{{))}}&#58; nada (sin wikitexto restante).
;Este es un caso raro en el que reemplazar [[m:Template:ifdef|ifdef]] por '''#if:''' no funciona directamente.


If <code>Feelings</code> contains e.g. <code>#expr</code> with an expression containing both parameters the same applies, except that we can only substitute the highest level (<code>Feelings</code>), not the parser function, so we cannot use <code>Special:Expandtemplates</code>.
== Sustitución de parte de los parámetros ==
Permite que la plantilla <code>Feelings</code> use los parámetros 1 y 2. Considera crear una plantilla Emotions con un parámetro 1, correspondiente a Feelings, con un valor dado <code>love</code> del parámetro 2. Compara <code><nowiki>{{Feelings|2=love}}</nowiki></code> y <code><nowiki>{{Feelings|1={{{1}}}|2=love}}</nowiki></code>. Se ven iguales en la página de la plantilla, consulta, por ejemplo, {{tim|t ps}}, pero el primero no funciona porque {{{1}}} se trata como texto, no como parámetro.


In general, substituting a parameter and applying a template or parser function sometimes gives the same result as substituting the template or parser function with the triple-braced parameter code and then substituting the parameter.
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.


Without defaults (all rendered the same in one-step substitution as without substitution):
Si <code>Feelings</code> contiene, por ejemplo, <code>#expr</code> con una expresión que contiene ambos parámetros, se aplica lo mismo, excepto que solo podemos sustituir el nivel más alto (<code>Feelings</code>), no la función de análisis, por lo que no podemos usar <code>Special:Expandtemplates</code>.


Examples with equality:
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.
*<code>Feelings</code> template containing <code>With {{{1}}} one can {{{2}}}</code> substituted with <code>1=love</code>, <code>2=help</code> gives <code>With love one can help</code>; substituted with <code>2=help</code> it gives <code>With {{{1}}} one can help</code>, which itself, substituted with <code>1=compassion</code> gives <code>With compassion one can help</code>.
*Two-level substitution of a template containing <code><nowiki>{{#if:{{{4}}}|{{{3}}}p}}</nowiki></code> with 3=u, 4=v gives up; substituted with 4=v it gives {{{3}}}p, which itself, substituted with 3=u gives up.


Examples without equality:
Sin valores predeterminados (todos se representan de la misma manera en una sustitución de un paso como sin sustitución):
*Two-level substitution of a template containing <code><nowiki>{{#if:{{{3}}}|{{{4}}}p}}</nowiki></code> with 3=, 4=v gives the empty string; substituted with 4=v it gives vp, which itself, substituted with 3=u remains vp.
*Two-level substitution of a template containing <code><nowiki>{{#if:{{{2}}}|{{{1}}}p}}</nowiki></code> with 1=u, 2=v gives up; substituted with 2=v it gives {{{1}}}pp (the bug), which itself, substituted with 3=u, gives upp.
*Two-level substitution of a template containing <code><nowiki>{{#expr:{{{1}}}*{{{2}}}}}</nowiki></code> with 1=7, 2=8 gives 56; substituted with 2=8 it gives &lt;strong class="error">Expression error: Unrecognised punctuation character "{"&lt;/strong>, which itself, substituted with 1=7, remains the same.


Thus without equality we may or may not get an error message.
Ejemplos con igualdad:
* La plantilla <code>Feelings</code> que contiene <code>Con {{{1}}} se puede {{{2}}}</code>, sustituida con <code>1=amor</code>, <code>2=ayudar</code>, da <code>Con amor se puede ayudar</code>; sustituida con <code>2=ayudar</code>, da <code>Con {{{1}}} se puede ayudar</code>, la cual, sustituida con <code>1=compasión</code> da <code>Con compasión se puede ayudar</code>.
* La sustitución de dos niveles de una plantilla que contiene <code><nowiki>{{#if:{{{4}}}|{{{3}}}p}}</nowiki></code> con 3=u, 4=v da up; sustituida con 4=v da {{{3}}}p, la cual, sustituida con 3=u da up.


One example shows that substitution of one parameter can be affected by the bug mentioned above. However, we can then replace e.g. {{{1}}} by <code><nowiki>{{{1{{{{{substvoid|}}}void}}}}}</nowiki></code> and do full substitution, except that substvoid is undefined, preventing the bug. The result works already correctly with transclusion. Subsequently it can be substituted with substvoid=subst: so that we get the plain {{{1}}}.
Ejemplos sin igualdad:
* La sustitución de dos niveles de una plantilla que contiene <code><nowiki>{{#if:{{{3}}}|{{{4}}}p}}</nowiki></code> 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 <code><nowiki>{{#if:{{{2}}}|{{{1}}}p}}</nowiki></code> 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 <code><nowiki>{{#expr:{{{1}}}*{{{2}}}}}</nowiki></code> con 1=7, 2=8 da 56; sustituida con 2=8 da &lt;strong class="error">Error de expresión: Carácter de puntuación no reconocido "{"&lt;/strong>, la cual, sustituida con 1=7, permanece igual.


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


Rendered the same as without substitution:
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 <code><nowiki>{{{1{{{{{substvoid|}}}void}}}}}</nowiki></code> 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}}}.
*Two-level substitution of a template containing <code><nowiki>With {{{1|love}}} one can {{{2}}}</nowiki></code> with <code>2=help</code> gives <code><nowiki>With {{{1|love}}} one can help</nowiki></code>.
*Two-level substitution of a template containing <code><nowiki>{{#if:{{{4}}}|{{{3|d}}}p}} with 4=v gives {{{3|d}}}p</nowiki></code>.


Not rendered the same as without substitution:
Con valores predeterminados:
*Two-level substitution of a template containing <code><nowiki>{{#if:{{{3|}}}|{{{4}}}p}} with 4=v gives vp</nowiki></code>.
*Two-level substitution of a template containing <code><nowiki>{{#if:{{{2}}}|{{{1|d}}}p}} with 2=v gives {{{1|d}}}pp (the bug)</nowiki></code>.
*Two-level substitution of a template containing <code><nowiki>{{#expr:{{{1|6}}}*{{{2}}}}}</nowiki></code> with 2=8 gives &lt;strong class="error">Expression error: Unrecognised punctuation character "{"&lt;/strong>.


After substitution with the parameter definition:
Representado de la misma manera que sin sustitución:
*<code><nowiki>{{subst:#if:{{{3|}}}|vp}}</nowiki></code> gives vp.
* La sustitución de dos niveles de una plantilla que contiene <code><nowiki>Con {{{1|amor}}} se puede {{{2}}}</nowiki></code> con <code>2=ayudar</code> da <code><nowiki>Con {{{1|amor}}} se puede ayudar</nowiki></code>.
*<code><nowiki>{{subst:#if:v|{{{1|d}}}p}}</nowiki></code> gives {{{1|d}}}pp (the bug).
* La sustitución de dos niveles de una plantilla que contiene <code><nowiki>{{#if:{{{4}}}|{{{3|d}}}p}} con 4=v da {{{3|d}}}p</nowiki></code>.
*<code><nowiki>{{subst:#expr:{{{1|6}}}*8}}</nowiki></code> gives &lt;strong class="error">Expression error: Unrecognised punctuation character "{"&lt;/strong>.


Rewritten:
No representado de la misma manera que sin sustitución:
*<code><nowiki>{{subst:#if:{{subst:#ifeq:{{{3|+}}}|{{{3|-}}}|vp}}}}</nowiki></code> gives the empty string.
* La sustitución de dos niveles de una plantilla que contiene <code><nowiki>{{#if:{{{3|}}}|{{{4}}}p}} con 4=v da vp</nowiki></code>.
*<code><nowiki>{{subst:#if:v|{{subst:#ifeq:{{{1|+}}}|{{{1|-}}}|{{{1}}}|d}}p}}</nowiki></code> gives dp.
* La sustitución de dos niveles de una plantilla que contiene <code><nowiki>{{#if:{{{2}}}|{{{1|d}}}p}} con 2=v da {{{1|d}}}pp (el error)</nowiki></code>.
*<code><nowiki>{{subst:#expr:{{subst:#ifeq:{{{1|+}}}|{{{1|-}}}|{{{1}}}|6}}*8}}</nowiki></code> gives 48.
* La sustitución de dos niveles de una plantilla que contiene <code><nowiki>{{#expr:{{{1|6}}}*{{{2}}}}}</nowiki></code> con 2=8 da &lt;strong class="error">Error de expresión: Carácter de puntuación no reconocido "{"&lt;/strong>.


==Limitations==
Después de la sustitución con la definición del parámetro:
Substitution is not available inside parser tags like {{tag|ref}} and {{tag|gallery}}.
* <code><nowiki>{{subst:#if:{{{3|}}}|vp}}</nowiki></code> da vp.
If you write {{tnull|subst:foo}}, it is not substituted nor transcluded, but remains as-is.
* <code><nowiki>{{subst:#if:v|{{{1|d}}}p}}</nowiki></code> da {{{1|d}}}pp (el error).
* <code><nowiki>{{subst:#expr:{{{1|6}}}*8}}</nowiki></code> da 48.


==Documenting substitution==
== Limitaciones ==
Usage of a template through <code>subst:</code> does not automatically show up in page histories.
La sustitución no está disponible dentro de etiquetas de análisis como {{tag|ref}} y {{tag|gallery}}.
Therefore providing the line of wikitext containing "subst:" in the [[m:Special:MyLanguage/Help:Edit summary|edit summary]] is especially useful.
Si escribes {{tnull|subst:foo}}, no se sustituye ni se transcluye, sino que permanece como está.


Also pages with a substituted template do not show up in backlinks, and the template does not appear in the list of transcluded templates on the edit page.
== Documentación de la sustitución ==
The template could add pages to a category to track substitutions, but listing this category on a page may clutter the list of content-based categories the page is in.
El uso de una plantilla a través de <code>subst:</code> no aparece automáticamente en el historial de la página.
Also, comments outside noinclude tags are included in the wikitext.
Por lo tanto, proporcionar la línea de wikitexto que contiene "subst:" en el [[m:Special:MyLanguage/Help:Edit summary|resumen de edición]] es especialmente útil.
Thus a comment can be used to mention the template.
It can even contain the values of the parameters, because substitution of parameters works even in comments.


==See also==
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.
*[[Help:Substitution/tl;dr]] – [[wikt:tl;dr|tl;dr]]
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.
*[[w:Help:Substitution#The safesubst: modifier]]
Además, los comentarios fuera de las etiquetas noinclude se incluyen en el wikitexto.
*[[w:Wikipedia:Template substitution]] – partly technical, partly policy
Así que un comentario se puede utilizar para mencionar la plantilla.
*[[Phabricator:T4003]] – feature request to allow marking a template as being substituted without "subst:"
Incluso puede contener los valores de los parámetros, porque la sustitución de parámetros funciona incluso en comentarios.
*Templates containing a call to itself with "subst:" and producing a similar call with updated info, either replacing or adding to the previous info:
**{{tim|last edit}}
**{{tim|page history}}


[[Category:Enciclopedia:Ayuda]]
[[Category:Enciclopedia:Ayuda]]

Revisión actual - 15:54 15 ene 2024

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.