4D v15.4Etiquetas HTML 4D |
|||||||||||
|
4D v15.4
Etiquetas HTML 4D
|
Valor de mivar | Etiquetas | Resultado |
mivar:="<B>" | <!--#4DTEXT mivar--> | <B> |
mivar:="<B>" | <!--#4DHTML mivar--> | <B> |
Para asegurarse de que las expresiones serán evaluadas correctamente independientemente del lenguaje o versión 4D utilizada, se recomienda utilizar la sintaxis tokenizada para los elementos cuyo nombre puede variar entre las diferentes versiones (comandos, tablas, campos, constantes). Por ejemplo, para insertar el comando Current time, introduzca 'Current time:C178'. Para más información, consulte Utilizar tokens en fórmulas.
En caso de un error de evaluación, el texto insertado será de la forma “<!--#4DHTML mivar--> : ## error # error code”.
Nota: la ejecución de un método 4D con 4DHTML desde una petición web depende del valor del atributo “Disponible vía las etiquetas y URLs 4D (4DACTION...)” definido en las propiedades del método. Para mayor información consulte la sección Seguridad de las conexiones.
Sintaxis: <!--#4DEVAL Nom Var--> o <!--#4DEVAL Expresion4D-->
La etiqueta 4DEVAL permite evaluar una variable o una expresión 4D. Al igual que la etiqueta 4DHTML existente, 4DEVAL no escapa los caracteres HTML al regresar del texto. Sin embargo, a diferencia de 4DHTML o 4DTEXT, 4DEVAL le permite ejecutar cualquier instrucción 4D válida, incluyendo asignaciones y expresiones que no devuelven ningún valor.
Por ejemplo, puede ejecutar:
$input:="<!--#4DEVAL a:=42-->" //asignación
$input:=$input+"<!--#4DEVAL a+1-->" //cálculo
PROCESS 4D TAGS($input;$output)
//$output = "43"
Para asegurarse de que las expresiones serán evaluadas correctamente independientemente del lenguaje o versión 4D utilizada, se recomienda utilizar la sintaxis tokenizada para los elementos cuyo nombre puede variar entre las diferentes versiones (comandos, tablas, campos, constantes). Por ejemplo, para insertar el comando Current time, introduzca 'Current time:C178'. Para más información, consulte Utilizar tokens en fórmulas.
En caso de error durante la interpretación, el texto insertado será de la forma: “<!--#4DEVAL expr-->: ## error # código de error”.
Nota: la ejecución de un método 4D con 4DEVAL desde una solicitud web requiere que la opción "Disponible a través de las etiquetas y URLs 4D (4DACTION ...)" se encuentre definida en las propiedades del método. Para obtener más información, consulte la sección Seguridad de las conexiones.
Sintaxis: <!--#4DSCRIPT/NombreMetodo/Param-->
La etiqueta 4DSCRIPT le permite ejecutar métodos 4D en el momento del procesamiento del template. La presencia del comentario HTML <!--#4DSCRIPT/MiMetodo/MiParam--> provoca la ejecución del método MiMetodo con el parámetro MiParam como cadena en $1.
Nota: si la etiqueta se llama en el contexto de un proceso web, cuando se carga la página, 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 la etiqueta 4DHTML).
Nota: la ejecución de un método con 4DSCRIPT depende del valor del atributo “Disponible vía las etiquetas y URLs 4D (4DACTION.)” definido en las propiedades del método. Para mayor información, consulte la sección Seguridad de las conexiones.
El análisis de los contenidos de la página se realiza con WEB SEND FILE (.htm, .html, .shtm, .shtml) o se llama WEB SEND BLOB (blob de tipo texto/html).
Recuerde que en modo no contextual, el análisis también se hace cuando un URL apunta a un archivo que tiene una extensión “.shtm” o “.shtml” (por ejemplo http://www.server.com/dir/page.shtm).
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:
#Tab/]C_TEXT($0) `Este parámetro siempre debe declararse
C_TEXT($1) `Este parámetro siempre debe ser declararse
$0:=String(Current date)
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 un template.
Sintaxis: <!--#4DINCLUDE Ruta-->
Esta etiqueta permite incluir, en una página HTML, otra página HTML (designada por el parámetro ruta). Por defecto sólo se incluye el cuerpo de la página HTML especificada, es decir el contenido entre las etiquetas <body> y </body> (las etiquetas mismas no se incluyen). Esto le permite evitar conflictos relacionados con las etiquetas presentes en los encabezados. Sin embargo si la página HTML especificada no contiene etiquetas <body></body>, se incluye la página completa. Usted debe verificar la consistencia de las etiquetas.
El comentario <!--#4DINCLUDE --> es muy útil en combinación con las pruebas (<!--#4DIF-->) o los bucles (<!--#4DLOOP-->). Es muy conveniente incluir etiquetas en función de un criterio o de manera aleatoria.
Al momento de la inclusión, sin importar 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 WEB SEND 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, es decir el documento “padre”. Utilice el carácter barra oblicua (/) como separador de carpetas y los dos puntos (..) para subir un nivel (sintaxis HTML).
Notas:
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".
Ejemplos
<<!--#4DINCLUDE subpagina.html--> <!--#4DINCLUDE carpeta/subpagina.html--> <!--#4DINCLUDE ../carpeta/subpagina.html-->
Sintaxis: <!--#4DBASE folderPath-->
La etiqueta <!--#4DBASE --> designa un directorio de trabajo que será utilizado por la etiqueta <!--#4DINCLUDE-->.
Cuando se llama en una página web, la etiqueta <!--#4DBASE --> modifica todas las llamadas <!--#4DINCLUDE--> posteriores en esta página, hasta la próxima <!--#4DBASE -->, si la hay. Si la carpeta <!--#4DBASE --> se modifica desde un archivo incluido, recupera su valor original desde el archivo padre.
El parámetro rutaCarpeta debe contener una ruta de acceso relativa a la página actual y debe terminar con una barra oblicua (/). La carpeta designada debe ubicarse al interior de la carpeta web.
Pase la palabra clave WEBFOLDER para restablecer la ruta por defecto (relativa a la página).
Por lo tanto el siguiente código, debe especificar una ruta relativa a cada llamada:
<!--#4DINCLUDE subpage.html--> <!--#4DINCLUDE folder/subpage1.html--> <!--#4DINCLUDE folder/subpage2.html--> <!--#4DINCLUDE folder/subpage3.html--> <!--#4DINCLUDE ../folder/subpage.html-->
... puede escribirse utilizando la etiqueta <!--#4DBASE -->:
<!--#4DINCLUDE subpage.html--> <!--#4DBASE folder/--> <!--#4DINCLUDE subpage1.html--> <!--#4DINCLUDE subpage2.html--> <!--#4DINCLUDE subpage3.html--> <!--#4DBASE ../folder/--> <!--#4DINCLUDE subpage.html--> <!--#4DBASE WEBFOLDER-->
Definición de un directorio para la página de inicio utilizando la etiqueta <!--#4DBASE -->:
/* Index.html */ <!--#4DIF LangFR=True--> <!--#4DBASE FR/--> <!--#4DELSE--> <!--#4DBASE US/--> <!--#4DENDIF--> <!--#4DINCLUDE head.html--> <!--#4DINCLUDE body.html--> <!--#4DINCLUDE footer.html-->
En el archivo head.html, la carpeta actual se modifica vía <!--#4DBASE -->, sin que cambie su valor en Index.html:
/* Head.htm */ /* el directorio de trabajo aquí es relativo al archivo incluido (FR/ o US/) */ <!--#4DBASE Styles/--> <!--#4DINCLUDE main.css--> <!--#4DINCLUDE product.css--> <!--#4DBASE Scripts/--> <!--#4DINCLUDE main.js--> <!--#4DINCLUDE product.js-->
Sintaxis: <!--#4DIF expresion--> {<!--#4DELSEIF expression2-->...<!--#4DELSEIF expresionN-->} {<!--#4DELSE-->} <!--#4DENDIF-->
Utilizado con los comentarios <!--#4DELSEIF--> (opcional), <!--#4DELSE--> (opcional) y <!--#4DENDIF-->, el comentario <!--#4DIF expresion--> ofrece la posibilidad de ejecutar partes de código 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.
Para asegurarse de que las expresiones serán evaluadas correctamente independientemente del lenguaje o versión 4D utilizada, se recomienda utilizar la sintaxis tokenizada para los elementos cuyo nombre puede variar entre las diferentes versiones (comandos, tablas, campos, constantes). Por ejemplo, para insertar el comando Current time, introduzca 'Current time:C178'. Para más información, consulte Utilizar tokens en fórmulas.
Los bloques <!--#4DIF expression--> ... <!--#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-->.
Utilizando la etiqueta <!--#4DELSEIF-->, puede probar un número ilimitado de condiciones. Sólo se ejecuta el contenido que sigue la primera condición evaluada como True. Si ninguna condición es verdadera, no se ejecuta ninguna instrucción (si no hay <!--#4DELSE--> final).
Puede utilizar una etiqueta <!--#4DELSE--> después de la última <!--#4DELSEIF-->. Si todas las condiciones son falsas, las instrucciones siguientes a <!--#4DELSE--> se ejecutan.
Los siguientes dos códigos son equivalentes.
<!--#4DIF Condition1--> /* Condition1 es true*/ <!--#4DELSE--> <!--#4DIF Condition2--> /* Condition2 es true*/ <!--#4DELSE--> <!--#4DIF Condition3--> /* Condition3 es true */ <!--#4DELSE--> /*Ninguna de las condiciones es verdadera*/ <!--#4DENDIF--> <!--#4DENDIF--> <!--#4DENDIF-->
<!--#4DIF Condition1--> /* Condition1 es true*/ <!--#4DELSEIF Condition2--> /* Condition2 es true*/ <!--#4DELSEIF Condition3--> /* Condition3 es true */ <!--#4DELSE--> /* Ninguna de las condiciones es verdadera*/ <!--#4DENDIF-->
Este ejemplo inserta páginas diferentes en función del usuario conectado:
<!--#4DIF LoggedIn=False--> <!--#4DINCLUDE Login.htm --> <!--#4DELSEIF User="Admin" --> <!--#4DINCLUDE AdminPanel.htm --> <!--#4DELSEIF User="Manager" --> <!--#4DINCLUDE SalesDashboard.htm --> <!--#4DELSE--> <!--#4DINCLUDE ItemList.htm --> <!--#4DENDIF-->
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#"")--> Nombres que comienzan por <!--#4DTEXT vnom-->. <!--#4DELSE--> No se ha encontrado ningún nombre. <!--#4DENDIF--> ... </BODY>
Sintaxis: <!--#4DLOOP condicion--> <!--#4DENDLOOP-->
Este comentario permite la repetición de una parte de código 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 cinco tipos de condiciones:
Nota: cuando la etiqueta 4DLOOP se utiliza con una tabla, los registros se cargan en modo sólo lectura.
El ejemplo de código siguiente:
<!--#4DLOOP [Personas]--> <!--#4DTEXT [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
Esta sintaxis efectúa in bucle para cada elemento del array. El índice actual del array se incrementa cuando se repite la porción de código.
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 siguiente:
<!--#4DLOOP arr_nombres--> <!--#4DTEXT 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
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, en el contexto de un proceso web Método 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.
El ejemplo de código siguiente:
<!--#4DLOOP mi_metodo--> <!--#4DTEXT 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
<!--#4DEVAL $i:=0--> <!--#4DLOOP ($i<4)--> <!--#4DEVAL $i--> <!--#4DEVAL $i:=$i+1--> <!--#4DENDLOOP-->
produce el siguiente resultado:
0
1
2
3
Para asegurarse de que las expresiones serán evaluadas correctamente independientemente del lenguaje o versión 4D utilizada, se recomienda utilizar la sintaxis tokenizada para los elementos cuyo nombre puede variar entre las diferentes versiones (comandos, tablas, campos, constantes). Por ejemplo, para insertar el comando Current time, introduzca 'Current time:C178'. Para más información, consulte Utilizar tokens en fórmulas.
ARRAY TEXT($array;2)
$array{1}:="hello"
$array{2}:="world"
$input:="<!--#4DEVAL $1-->"
$input:=$input+"<!--#4DLOOP $2-->"
$input:=$input+"<!--#4DEVAL $2->{$2->}--> "
$input:=$input+"<!--#4DENDLOOP-->"
PROCESS 4D TAGS($input;$output;"elements = ";->$array)
// $output = "elements = hello world "
En caso de error de evaluación, el texto “<!--#4DLOOP expression-->: descripción” se inserta en lugar del contenido ubicado entre <!--#4DLOOP --> y <!--#4DENDLOOP-->.
Los siguientes mensajes se pueden mostrar:
- Una expresión de tipo no esperado (error estándar);
- Nombre de tabla invalido (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 (durante la ejecución del método);
- Error de acceso (usted no tienen los privilegios de acceso apropiados para acceder a la tabla o al método).
- 4DENDLOOP esperado (el número de <!--#4DENDLOOP--> no corresponde al de <!--#4DLOOP -->).
Las etiquetas 4D se interpretan de forma recursiva: 4D siempre intenta reinterpretar el resultado de una transformación y, en caso de que una nueva transformación haya tenido lugar, se realiza una interpretación adicional, y así sucesivamente hasta que el producto obtenido ya no requiera de ninguna transformación adicional. Por ejemplo, dada la siguiente instrucción:
<!--#4DHTML [Mail]Letter_type-->
Las etiquetas de transformación 4D aceptan diferentes tipos de datos como parámetros: texto, variables, métodos, nombres de comandos, etc. Cuando estos datos son ofrecidos por su propio código, no hay riesgo de inserción de código malicioso ya que usted controla las entradas. Sin embargo, el código de su base a menudo trabaja con datos que eran, en un momento u otro, introducidos a través de una fuente externa (entrada del usuario, importación, etc.).
En este caso, es aconsejable no utilizar etiquetas de transformación tales como 4DEVAL o 4DSCRIPT, que evalúan los parámetros, directamente con este tipo de datos.
Además, de acuerdo con el principio de la recursividad (ver sección anterior), el código malicioso puede incluir etiquetas de transformación en sí. En este caso, es imprescindible utilizar la etiqueta 4DTEXT.
Para evitar este riesgo, sólo puede utilizar la etiqueta 4DTEXT sistemáticamente en este caso. Como esta etiqueta escapa los caracteres HTML especiales, no se reinterpretará cualquier código malicioso recursivo que pueda haber sido insertado. Para hacer referencia al ejemplo anterior, el campo "Nombre" contendrá, en este caso, "<!--#4DEVAL QUIT 4D-->" que no será transformado.
Asociar objetos 4D a objetos HTML
Páginas semidinamicas
PROCESS 4D TAGS
URLs y acciones de formularios
Producto: 4D
Tema: Cadenas de caracteres
4DVAR, 4DTEXT, 4DHTMLVAR, 4DHTML, 4DSCRIPT, 4DINCLUDE, 4DIF, 4DLOOP, 4DELSEIF
Manual de lenguaje 4D ( 4D v15.4)
Manual de lenguaje 4D ( 4D v15)
Manual de lenguaje 4D ( 4D v15.3)