versión 2004.2 (Modificado)
El servidor Web 4D le ofrece diferentes etiquetas HTML específicas para 4D, permitiendo insertar referencias a las expresiones o variables 4D, o diferentes tipos de procesos, en páginas HTML enviadas por el servidor Web 4D, por ejemplo con la ayuda de los comandos SEND HTML FILE y SEND HTML BLOB. Estas páginas se llaman páginas semidinámicas.
Estas etiquetas se insertan como comentarios HTML (<!--#Tag Contents--> en código HTML). La mayoría de los editores HTML ofrecen funciones que facilitan la inserción de comentarios en las páginas estáticas.
Las siguientes etiquetas HTML 4D están disponibles:
4DVAR, para insertar las variables y expresiones 4D,
4DHTMLVAR, similar a 4DVAR pero insertando el código HTML,
4DSCRIPT, para ejecutar un método 4D,
4DINCLUDE, para incluir una página dentro de otra,
4DIF, 4DELSE y 4DENDIF, para insertar las condiciones en el código HTML,
4DLOOP y 4DENDLOOP, para insertar bucles en el código HTML.
Nota de compatibilidad: En las versiones 6.0.x de 4D, la inserción de variables 4D en páginas estáticas se efectúa utilizando corchetes cuadrados [NombreVar]. En una base convertida, para poder utilizar la sintaxis HTML estándar (<!--#4DVAR NombreVar-->), asegúrese de que la opción "Usar comentarios 4DVAR en vez de corchetes" esté seleccionada en la caja de diálogo de Preferencias (ver la sección Web Server Settings).
Etiquetas HTML 4D
El análisis del contenido de las páginas semidinámicas enviadas por 4D se efectúa en el momento de la llamada a los comandos SEND HTML FILE (.htm, .html, .shtm, .shtml) o SEND HTML BLOB (text/html Tipo BLOB) y cuando se envían páginas llamadas utilizando URLs.
Sin embargo, en modo no contextual, por razones de optimización, las páginas que tienen sufijos ".htm" y ".html" NO son analizadas. Para "forzar" el análisis de las páginas HTML en este caso, debe añadir el sufijo ".shtm" o ".shtml" (por ejemplo, http://www.server.com/dir/page.shtm).
Un ejemplo de utilización de este tipo de página se presenta en la descripción del comando WEB CACHE STATISTICS.
A continuación se presentan los casos en los cuales 4D analiza las etiquetas contenidas en las páginas HTML enviadas a los navegadores Web:
Condiciones de envío | Análisis del contenido de las páginas enviadas | |
Modo contextual | Modo no contextual | |
Extensiones de las páginas (caso general): | ||
.htm, .html, .shtm, .shtml (páginas HTML) | X | X |
.xml, .xsl (páginas XML) | X | X |
.wml (páginas WML) | X | X |
Páginas llamadas vía URLs | X | X, excepto páginas con sufijo |
".htm" o ".html" | ||
Comando SEND HTML FILE | X | X |
Comando SEND HTML BLOB (si el | X | X |
BLOB es de tipo "text/html") | ||
Inclusión por la etiqueta <!--4DINCLUDE --> | X | X |
Inclusión por la etiqueta {mypage.htm} | X | - |
Para ser procesado por 4D, un comentario HTML debe tener el siguiente formato <!--#4D...-->. Por favor tenga en cuanta que algunos editores HTML añaden automáticamente otra información dentro del comentario; esto puede provocar errores de análisis.
Sin embargo, otros comentarios HTML tales como <!--Beginning of list--> son posibles.
Si un comentario <!--#4D... no termina en -->, el siguiente mensaje "<!--#4D... : --> esperado" será insertado y el análisis será interrumpido en este nivel (la página se enviará para indicar el error).
Es posible mezclar diferentes tipos de comentarios. Por ejemplo, es posible la siguiente estructura HTML:
<HTML> ... <BODY> <!--#4DSCRIPT/PRE_PROCESS--> (Llamada del método) <!--#4DIF (mivar=1)--> (Condición If) <!--#4DINCLUDE banner1.html--> (Inserción de una subpágina) <!--#4DENDIF--> (Fin de if) <!--#4DIF (mivar=2)--> <!--#4DINCLUDE banner2.html--> <!--#4DENDIF--> <!--#4DLOOP [TABLA]--> (bucle en la selección actual) <!--#4DIF ([TABLA]ValNum>10)--> (If [TABLE]ValNum>10) <!--#4DINCLUDE subpagina.html--> (inclusión de una sub página) <!--#4DELSE--> (Else) <B>Value: <!--#4DVAR [TABLA]ValNum--></B><BR> (Visualización de un campo) <!--#4DENDIF--> <!--#4DENDLOOP--> (Fin del bucle) </BODY> </HTML>
4DVAR
Sintaxis: <!--#4DVAR NombreVar--> o <!--#4DVAR 4DExpresion-->
La etiqueta <!--#4DVAR NombreVar--> le permite insertar una referencia a una variable o a una expresión 4D en cualquier parte de una página HTML. Por ejemplo, si escribe:
<P>Bienvenido a<!--#4DVAR vtNombreSitio-->!</P>
El valor de la variable 4D vtNomSite se insertará en la página HTML en el momento de su envío.
Puede insertar una variable de texto 4D en el código HTML. Para hacer esto, basta con que el primer carácter de la variable sea el código 1 (por ejemplo, vtHTML:=Char(1)+"...HTML code..."). También puede utilizar la etiqueta 4DHTMLVAR.
También puede insertar las expresiones 4D (no sólo las variables) en los comentarios HTML 4D con la etiqueta 4DVAR. Puede insertar directamente el contenido de un campo (<!--#4DVAR [nomTabla]nomCampo-->) o un elemento de array (por ejemplo <!--#4DVAR arr{1}-->) o un método que devuelve un valor (<!--#4DVAR mimetodo-->).
La conversión de la expresión sigue las mismas reglas que la conversión de una variable. Además, la expresión debe cumplir con las reglas de sintaxis de 4D.
Nota: la ejecución de un método 4D con 4DVAR depende del valor del atributo "Disponible vía 4DACTION, 4DMETHOD y 4DSCRIPT" definido en las propiedades del método. Para mayor información, consulte la sección Connection Security.
Aunque una expresión puede contener directamente las llamadas a funciones 4D, no es recomendable por razones de localización. Por ejemplo, <!--#4DVAR Current date-->, aunque es interpretado correctamente con un 4D en inglés no será entendido por una versión francesa. Lo mismo aplica a los números reales (el separador decimal puede variar de un país a otro). En ambos casos, es preferible afectar una variable por programación.
En caso de error de evaluación, el texto insertado será de la forma "<!--#4DVAR myvar--> : ## error # error code".
Notas:
Debe utilizar las variables proceso.
Es posible mostrar el contenido de un campo imagen. Además (en modo contextual únicamente), puede mostrar el contenido de una variable imagen. En ambos modos, no es posible mostrar el contenido de un elemento de array imagen.
Como el HTML es una aplicación orientada al procesamiento de texto, por lo general usted trabajará con variables de texto. Sin embargo, puede utilizar las variables BLOB (que permiten evitar el limite de 32 000 caracteres de las variables de tipo texto). Sólo necesita generar los BLOBs en modo Texto sin longitud.
Ejemplos de usos de la etiqueta 4DVAR se presentan en la sección Binding 4D objects with HTML objects.
4DHTMLVAR
Sintaxis: <!--#4DHTMLVAR NombreVar--> o <!--#4DHTMLVAR Expresion4D-->
Esta etiqueta permite evaluar una variable o una expresión 4D e insertarla en una página como una expresión HTML. De hecho, esta etiqueta tiene exactamente el mismo efecto que la etiqueta <!--#4DVAR NombreVar--> cuando NombreVar comienza por el carácter de código 1 (ver arriba).
Por ejemplo, estos son los resultados de la inserción de la variable Texto 4D mivar con las etiquetas disponibles:
Valor de mivar | Etiquetas | Inserción en la página Web |
mivar:="<B>" | <!--#4DVAR mivar--> | <B> |
mivar:=Char(1)+"<B>" | <!--#4DVAR mivar--> | <B> |
mivar:="<B>" | <!--#4DHTMLVAR mivar--> | <B> |
En el caso de un error de evaluación, el texto insertado será de la forma "<!--#4DHTMLVAR mivar--> : ## error # error code".
Nota: la ejecución de un método 4D con 4DHTMLVAR depende del valor del atributo "Disponible vía 4DACTION, 4DMETHOD y 4DSCRIPT" definido en las propiedades del método. Para mayor información consulte la sección Connection Security.
Nota: la variable debe expresarse utilizando el mapa de caracteres ISO Latin-1 (para mayor información, consulte la descripción del comando Mac to ISO).
4DSCRIPT/
Sintaxis: <!--#4DSCRIPT/NombreMetodo/Param-->
La etiqueta 4DSCRIPT le permite ejecutar métodos 4D en el momento del envío de páginas HTML estáticas. La presencia de la etiqueta <!--#4DSCRIPT/MiMetodo/MiParam--> en una página estática como un comentario HTML provoca la ejecución del método MiMetodo con el parámetro MiParam como cadena en $1. Cuando se carga la página de inicio, 4D llama al Método de base On Web Authentication (si existe). Si devuelve True, 4D ejecuta el método.
El método devuelve texto en $0. Si la cadena comienza con el carácter de código 1, se considera como HTML (el mismo principio que para las variables).
Nota: La ejecución de un método con 4DSCRIPT depende del valor del atributo "Disponible vía 4DACTION, 4DMETHOD y 4DSCRIPT" definido en las propiedades del método. Para mayor información, consulte la sección Connection Security.
El análisis de los contenidos de la página se realiza cuando se llama a SEND HTML FILE (.htm, .html, .shtm, .shtml) o a SEND HTML BLOB (blob de tipo texto/html).
Recuerde que en modo no contextual, el análisis también se realiza cuando un URL apunta a un archivo que tiene la extensión ".shtm" o ".shtml" (por ejemplo http://www.server.com/dir/page.shtm).
Nota: En modo contextual, el método se ejecuta en el contexto.
Por ejemplo, inserte el siguiente comentario "Hoy es<!--#4DSCRIPT/MIMETH/MIPARAM-->" en una página estática. Cuando se carga la página, 4D llama al Método de base On Web Authentication (si existe), luego llama al método MIMET y pasa la cadena "/MIPARAM" como el parámetro $1.
El método devuelve texto en $0 (por ejemplo "12/31/03"); la expresión "Hoy es <!--#4DSCRIPT/MIMETH/MIPARAM>" se convierte en "Hoy es 12/31/03".
El código del método MIMET es:
C_TEXT($0) `Este parámetro siempre debe ser declarado C_TEXT($1) `Este parámetro siempre debe ser declarado $0:=String(Current date)
Advertencia: siempre debe declarar los parámetros $0 y $1 en el método llamado.
Nota: un método llamado por 4DSCRIPT no debe llamar elementos de interfaz (DIALOG, ALERT...).
Como 4D ejecuta los métodos en su orden de aparición, es muy posible llamar a un método que define el valor de muchas variables que están referenciadas más adelante en el documento, cualquiera que sea el modo que esté utilizando.
Nota: Puede insertar tantos comentarios <!--#4DSCRIPT...--> como quiera en una página estática.
Nota de compatibilidad: En versiones anteriores de 4D, la misma etiqueta, 4DACTION, podía utilizarse como un URL (por ejemplo, http://miservidor/4DACTION/met), o como un comentario HTML en una página estática (<!--#4DACTION/met-->). Como esto puede producir confusión, a partir de la versión 6.7 de 4D la etiqueta 4DSCRIPT reemplaza a la etiqueta 4DACTION. La etiqueta 4DSCRIPT se utiliza exclusivamente como comentario HTML (<!--#4DSCRIPT/met-->) y tiene el mismo efecto que <!--#4DACTION/met-->. 4DACTION ahora sólo es utilizado por URLs.
4DINCLUDE
Sintaxis: <!--#4DINCLUDE Ruta-->
Este comentario permite incluir, en una página HTML, el cuerpo de otra página HTML (indicado por el parámetro ruta). El cuerpo de una página HTML se incluye dentro de las etiquetas <BODY> y </BODY> (las etiquetas mismas no están incluidas).
El comentario <!--#4DINCLUDE --> es muy útil para pruebas (<!--#4DIF-->) o bucles (<!--#4DLOOP-->). Es muy conveniente incluir etiquetas en función de un criterio, o de manera aleatoria.
En el momento de la inclusión, sin importar el modo y la extensión del nombre del archivo, 4D analiza la página llamada y luego inserta los contenidos (modificados o no) en la página que origina la llamada 4DINCLUDE.
La ubicación en la caché Web de una página incluida con el comentario <!--#4DINCLUDE --> responde a las mismas reglas que las páginas llamadas vía un URL o enviadas con el comando SEND HTML FILE.
Pase en ruta, la ruta de acceso al documento a incluir. Advertencia: en el caso de la etiqueta 4DINCLUDE, la ruta de acceso es relativa al documento en curso de análisis, que es el documento "padre". Utilice el carácter barra oblicua (/) como separador de carpetas y los dos puntos (..) para subir un nivel (sintaxis HTML).
El número de <!--#4DINCLUDE ruta--> dentro de una página es ilimitado. Sin embargo, las llamadas a <!--#4DINCLUDE ruta--> sólo pueden realizarse a un nivel. Esto significa que, por ejemplo, no puede insertar el comentario <!--#4DINCLUDE midoc3.html--> en el cuerpo de la página midoc2.html, llamada por <!--#4DINCLUDE midoc2--> insertado en midoc1.html.
Además, 4D verifica que las inclusiones no sean recursivas.
En caso de error, el texto insertado es de la forma "<!--#4DINCLUDE ruta--> :No se puede abrir el documento".
Nota: En modo contextual, si una página se inserta en un formulario vía un marcador {mipagina.html} insertado en un área de texto estático, los comentarios 4DINCLUDE (si los hay) serán ignorados.
Ejemplos
<!--#4DINCLUDE subpagina.html--> <!--#4DINCLUDE carpeta/subpagina.html--> <!--#4DINCLUDE ../carpeta/subpagina.html-->
4DIF, 4DELSE y 4DENDIF
Sintaxis: <!--#4DIF expresion--> <!--#4DELSE--> <!--#4DENDIF-->
Utilizado con los comentarios <!--#4DELSE--> (opcional) y <!--#4DENDIF-->, el comentario <!--#4DIF expresion--> ofrece la posibilidad de ejecutar código HTML de manera condicional.
El parámetro expresion puede contener toda expresión 4D válida devolviendo un valor booleano. Debe estar entre paréntesis y cumplir con las reglas de sintaxis de 4D.
Los bloques <!--#4DIF expresion--> ... <!--#4DENDIF--> pueden estar anidados en varios niveles. Como en 4D, cada <!--#4DIF expresion--> debe tener un <!--#4DENDIF--> correspondiente.
En caso de un error de interpretación, el texto "<!--#4DIF expresion-->: Se esperaba una expresión booleana" se inserta en lugar del contenido situado entre <!--#4DIF --> y <!--#4DENDIF-->.
De la misma forma, si no hay tantos <!--#4DENDIF--> como <!--#4DIF -->, el texto "<!--#4DIF expresion-->: 4DENDIF esperado" se inserta en lugar de los contenidos ubicados entre <!--#4DIF --> y <!--#4DENDIF-->.
Ejemplo
Este ejemplo de código insertado en una página HTML estática muestra una etiqueta diferente de acuerdo al resultado de la expresión vnom#"":
<BODY> ... <!--#4DIF (vnom#"")--> Names starting with <!--#4DVAR vnom-->. <!--#4DELSE--> No se ha encontrado ningún nombre. <!--#4DENDIF--> ... </BODY>
4DLOOP y 4DENDLOOP
Sintaxis: <!--#4DLOOP condicion--> <!--#4DENDLOOP-->
Este comentario permite la repetición de una parte de código HTML siempre y cuando se cumpla la condición. La porción está delimitada por <!--#4DLOOP--> y <!--#4DENDLOOP-->.
Los bloques <!--#4DLOOP condicion--> ... <!--#4DENDLOOP--> pueden estar imbricados. Como en 4D, cada <!--#4DLOOP condicion--> debe tener un <!--#4DENDLOOP--> correspondiente.
Hay tres tipos de condiciones:
<!--#4DLOOP [tabla]-->
Esta sintaxis realiza un bucle para cada registro desde la selección actual de la tabla en el proceso en actual. La porción de código HTML ubicada entre los dos comentarios se repite para cada registro de la selección actual.
Nota: Cuando la etiqueta 4DLOOP se utiliza con una tabla, los registros se cargan en modo sólo lectura.
El siguiente código HTML:
<!--#4DLOOP [Personas]--> <!--#4DVAR [Personas]Nombre--> <!--#4DVAR [Personas]Apellido-><BR> <!--#4DENDLOOP-->
... puede traducirse en lenguaje 4D como:
FIRST RECORD([Personas]) While(Not(End selection([Personas]))) ... NEXT RECORD([Personas]) End while
<!--#4DLOOP array-->
Esta sintaxis efectúa in bucle para cada elemento del array. El elemento actual del array se incrementa cuando se repite la porción de código HTML.
Nota: Esta sintaxis no puede utilizarse con arrays de dos dimensiones. En este caso, es mejor combinar un método con bucles anidados.
El siguiente ejemplo de código HTML:
<!--#4DLOOP arr_nombres--> <!--#4DVAR arr_nombres{arr_nombres}--><BR> <!--#4DENDLOOP-->
... puede traducirse en lenguaje 4D como:
For ($Elem;1;Size of array(arr_nombres)) arr_nombres:=$Elem ... End for
<!--#4DLOOP metodo-->
Esta sintaxis efectúa un bucle mientras el método devuelva True. El método admite un parámetro de tipo Entero largo. Primero se llama con el valor 0 para permitir una fase de inicialización (si es necesaria); luego se llama con los valores 1, 2, 3, ... mientras devuelva True.
Por razones de seguridad, el Método de base On Web Authentication puede llamarse, sólo una sola vez, antes de la fase de inicialización (ejecución del método con 0 como parámetro). Si se confirma la autenticación, se lleva a cabo la fase de inicialización.
Advertencia: C_BOOLEAN($0) y C_LONGINT($1) DEBEN declararse dentro del método por motivos de compilación.
Ejemplo
El ejemplo de código HTML siguiente:
<!--#4DLOOP mi_metodo--> <!--#4DVAR var--> <BR> <!--#4DENDLOOP-->
... puede traducirse en código 4D como:
If(AuthenticationWebOK) If(mi_metodo(0)) $contador:=1 While(mi_metodo($contador)) ... $contador:=$contador+1 End while End if End if
El método mi_metodo puede ser de esta forma:
C_LONGINT($1) C_BOOLEAN($0) If($1=0) `Inicialización $0:=True Else If($1<50) ... var:= ... $0:=True Else $0:=False `Detiene el bucle End if End if
En caso de un error de interpretación, el texto "<!--#4DLOOP expresion-->: Descripción" se inserta en lugar del contenido ubicado entre <!--#4DLOOP --> y <!--#4DENDLOOP-->.
Puede aparecer uno de los siguientes mensajes:
- No se esperaba una expresión de este tipo (error estándar)
- Nombre de tabla incorrecto (error en el nombre de la tabla)
- Se esperaba un array (la variable no es un array o es un array de dos dimensiones)
- El método no existe
- Error de sintaxis (cuando el método se ejecuta)
- Error de acceso (no tiene los privilegios de acceso apropiados para acceder a la tabla o al método)
- 4DENDLOOP esperado (el número de <!--#4DENDLOOP--> no corresponde con <!--#4DLOOP -->).
Ver también
Asociar objetos 4D a objetos HTML , URLs y acciones de formularios, Utilizar el modo contextual .