El alcance de las etiquetas
Este truco trata sobre las seudo etiquetas que utiliza el WebBroker de Delphi durante la generación de código HTML por parte de aplicaciones CGI/ISAPI. Es sabido que los componentes productores de HTML pueden utilizar una "plantilla" de texto escrita en este lenguaje de descripción como base del código que generan. A la plantilla HTML se le añaden etiquetas especiales que no son utilizadas por los navegadores, con el fin de ser sustituidas durante la ejecución de la aplicación por los componentes mencionados.
Por ejemplo, si queremos mostrar una página con el importe total de los artículos en la cesta de la compra de algún ciudadano, es probable que utilicemos una plantilla similar a ésta:
<html>
<body>
El importe total es <#IMPORTE>.
</body>
</html>
Como el carácter que sigue al paréntesis angular de apertura es una almohadilla (#), Delphi reconoce que se trata de una especie de macro que tiene que expandir.
Ahora lo importante es saber: ¿dónde pueden utilizarse estas etiquetas especiales? La pregunta no es tan trivial como a primera vista aparenta ser. HTML no permite el uso de etiquetas anidadas. No se permiten construcciones como la siguiente, porque la etiqueta ETIQ2 aparece dentro de la etiqueta ETIQ1:
<!-- ¡¡¡ESTO NO LO PERMITE HTML!!! -->
<ETIQ1 <ETIQ2> PARAM1="XX" PARAM2="YY">
Nuestro primer reflejo es pensar que Delphi no permitirá tampoco situar una etiqueta "transparente" dentro de una etiqueta regular de HTML, ¿no? Pues si piensa así, está completamente equivocado. El siguiente ejemplo muestra una plantilla correcta:
<!-- ¡¡¡PERO ESTO SI LO PERMITE DELPHI!!! -->
<A HREF="<#DIRECTORIO>ayuda.htm">
La etiqueta <#DIRECTORIO> no sólo aparece dentro de una etiqueta de enlace, sino que además se expande dentro de las dobles comillas del valor del parámetro HREF. Delphi localiza sus etiquetas especiales analizando secuencialmente el texto de la plantilla. Una vez que ha encontrado una secuencia "<#" busca el siguiente paréntesis angular de cierre. Esto quiere decir que realmente no importa dónde se encuentra la etiqueta, aunque no se permiten etiquetas especiales (de Delphi) anidadas.
|