4D v14.3

Etiquetas HTML 4D

Página Inicial

 
4D v14.3
Etiquetas HTML 4D

Etiquetas HTML 4D  


 

 

O servidor web 4D lhe oferece diferentes etiquetas HTML específicas para 4D, permitindo inserir referências às expressões ou variáveis 4D ou diferentes tipos de processos, em páginas HTML estáticas enviadas pelo servidor Web 4D, por exemplo com a ajuda dos comandos WEB SEND FILE e SEND HTML BLOB.  Estas páginas se chamam páginas semidinâmicas.

Estas etiquetas são inseridas como comentários HTML ( <!--#Tag Contents--> em código HTML). A maioria dos editores HTML oferecem funções que facilitam a inserção de comentários nas páginas estáticas.

As seguintes etiquetas HTML 4D estão disponíveis:

  • 4DTEXT, para inserir as variáveis e expressões 4D,
  • 4DHTML, para inserir o código HTML,
  • 4DSCRIPT, para executar um método 4D,
  • 4DINCLUDE, para incluir uma página dentro de outra,
  • 4DIF, 4DELSE e 4DENDIF, para inserir as condições no código HTML,
  • 4DLOOP e 4DENDLOOP, para inserir loops no código HTML.

A análise do conteúdo das páginas semi-dinâmicas enviadas por 4D se realiza no momento da chamada aos comandos WEB SEND FILE(.htm, .html, .shtm, .shtml) ou SEND HTML BLOB (blob de tipo texto/html) ou WEB SEND TEXT, assim como quando são enviadas páginas chamadas utilizando URLs. Neste último caso, por razões de otimização as páginas que tem o sufixo ".htm" e "html" NÃO são analisadas.
Para forçar a análise de páginas HTML neste caso, deve adicionar o sufixo ".shtm" ou ".shtml" (por exemplo, http://www.server.com/dir/page.shtm).
Um exemplo de uso deste tipo de página se apresenta na descrição do comando WEB GET STATISTICS.

Internamente, o analisador trabalha com as cadeias UTF-16, mas os dados a analisar podem ter sido codificados de maneira diferente. Quando as etiquetas contém texto (por exemplo, 4DHTML), 4D converte os dados quando é necessário dependendo de sua origem e da informação disponível (charset). A continuação estão os casos aonde 4D analisa as etiquetas contidas nas páginas HTML, como também as conversões realizadas:

Ação Análise do conteúdo das páginas enviadasConjunto de caracteres utilizado para a análise das etiquetas

Extensões das páginas (caso geral):

.htm, .html, .shtm, .shtml (páginas HTML)X
.xml, .xsl (páginas XML)X
.wml (páginas WML)X
Páginas chamadas via URLsX, exceto páginas com extensões “.htm” or “.html”Uso do charset passado como parâmetro do cabeçalho "Content-Type" da página. Se não há nenhum, procura uma etiqueta META-HTTP EQUIV com um charset. Caso contrário, utiliza o conjunto de caracteres por padrão do servidor HTTP
Comando WEB SEND FILEXUso do charset passado como parâmetro do cabeçalho "Content-Type" da página. Se não há nenhum, procure uma etiqueta META-HTTP EQUIV com um charset. Caso contrário, utilize o conjunto de caracteres por padrão do servidor HTTP
Comando WEB SEND TEXTXNão é necessária a conversão
Comando SEND HTML BLOBX, se o BLOB é de tipo “text/html”Uso do charset passado como parâmetro do cabeçalho "Content-Type" da resposta. Caso contrário, utiliza o conjunto de caracteres por padrão do servidor HTTP
Inclusão pela etiqueta <!--4DINCLUDE -->XUso do charset passado como parâmetro do cabeçalho "Content-Type" da página. Se não há nenhum, procure uma etiqueta META-HTTP EQUIV com um charset. Caso contrário, utilize o conjunto de caracteres por padrão do servidor HTTP
Comando PROCESS 4D TAGSXDados texto: não conversão. Dados BLOB: conversão automática do conjunto de caracteres Mac-Roman por compatibilidade

Para ser processado por 4D, um comentário HTML deve ter o seguinte formato <!--#4D...-->. Por favor leve em consideração que alguns editores HTML adicionam automaticamente outra informação dentro do comentário; isso pode provocar erros de análise.

Entretanto, outros comentários HTML tais como <!--Beginning of list--> são possíveis.

Se um comentário <!--#4D... não termina em -->, a seguinte mensagem “<!--#4D... : --> esperado” se inserirá e a análise será interrompida neste nível (a página será enviada para indicar o erro).

É possível misturar diferentes tipos de comentários. Por exemplo, é possível a seguinte estrutura HTML:

<HTML>
 ...
 <BODY>
 <!--#4DSCRIPT/PRE_PROCESS-->   (Chamada do método)
 <!--#4DIF (myvar=1)-->   (condição If)
    <!--#4DINCLUDE banner1.html-->   (Inserir Subpágina)
 <!--#4DENDIF-->   (End if)
 <!--#4DIF (myvar=2)-->
    <!--#4DINCLUDE banner2.html-->
 <!--#4DENDIF-->
 
 <!--#4DLOOP [TABLE]-->   (loop na seleção atual)
 <!--#4DIF ([TABLE]ValNum>10)-->   (If [TABLE]ValNum>10)
    <!--#4DINCLUDE subpage.html-->   (inserir sub página)
 <!--#4DELSE-->   (Else)
    <B>Value: <!--#4DTEXT [TABLE]ValNum--></B><BR>
       (Field display)
 <!--#4DENDIF-->
 <!--#4DENDLOOP-->   (End for)
 </BODY>
 </HTML>

4DTEXT  

Sintaxe: <!--#4DTEXT NomeVar--> ou <!--#4DTEXT 4DExpression-->

A etiqueta <!--#4DTEXT NomeVar--> lhe permite inserir uma referência a uma variável ou a uma expresão 4D em qualquer parte de uma página HTML. Por exemplo, se escreve:

<P>Bem-vindo a<!--#4DTEXT vtNomeSite-->!</P>


O valor da variável 4D vtNomSite se inserirá na página HTML no momento de seu envio. Pode inserir uma variável de texto 4D no código HTML. Este valor é inserido em forma de texto simples, os caracteres HTML especiais tais como  ">" se escapam automaticamente. 

Também pode inserir as expressões 4D (não só as variáveis) nos comentários HTML 4D com a etiqueta 4DTEXT. Pode inserir diretamente o conteúdo de um campo (<!--#4DTEXT [nomTabela]nomCampo-->) ou um elemento de array (por exemplo <!--#4DTEXTarr{1}-->) ou um método que retorna um valor (<!--#4DTEXT MeuMétodo-->).

A conversão da expressão segue as mesmas regras que a conversão de uma variável. Além disso, a expressão deve cumprir com as regras de sintaxe de 4D.

Nota: A execução de um método 4D com 4DTEXT depende do valor do atributo “Disponível através das etiquetas HTML e URLs 4D (4DACTION...)” definido nas propriedades do método. Para maior informação, consulte a seção Conexões de Segurança.

Mesmo que uma expressão possa conter diretamente as chamadas a funções 4D, não é recomendável por razões de localização. Por exemplo, <!--#4DTEXT Current date-->, mesmo que seja interpretado corretamente com um 4D em inglês no será entendida por uma versão francesa. O mesmo aplica aos números reais (o separador decimal pode variar de um país a outro). Em ambos os casos, é preferível atribuir uma variável por programação.

Em caso de erro de interpretação, o texto inserido será da forma “<!--#4DTEXT myvar--> : ## erro # erro code”.

Notas:
  • Deve utilizar as variáveis processo.
  • É possível mostrar o conteúdo de um campo imagem. Entretanto não é possível mostrar o conteúdo de um elemento de array imagem.
  • Como o HTML é uma aplicação orientada ao processamento de texto, geralmente você trabalhará com variáveis de texto. Entretanto, pode utilizar as variáveis BLOB. Só necessita gerar os BLOBs em modo Texto sem comprimento.


Nota de compatibilidade
: Esta etiqueta mais especializada substitui a etiqueta genérica 4DVAR a partir da versão 12.2 de 4D. A etiqueta 4DVAR ainda é compatível e funciona como nas versões anteriores. Entretanto, não se recomenda utilizar a etiqueta 4DTEXT para inserir o texto.

4DHTML  

Sintaxe: <!--#4DHTML NomVar--> ou <!--#4DHTML 4DExpression-->

Esta etiqueta permite avaliar uma variável ou uma expressão 4D e inseri-la em uma página como uma expressão HTML. Diferente da etiqueta 4DTEXT, esta etiqueta não converte os caracteres especiais HTML.

Por exemplo, esses são os resultados da inserção da variável texto 4D minhavar com as etiquetas disponíveis:

Valor minhavarEtiquetasInserção na página web
minhavar:="<B>"<!--#4DTEXT minhavar-->&lt;B&gt;
minhavar:="<B>"<!--#4DHTML minhavar--><B>
No caso de um erro de interpretação, o texto inserido será da forma “<!--#4DHTML minhavar--> : ## erro # erro code”.

Nota: A execução de um método 4D com 4DHTML depende do valor do atributo “Disponível através as etiquetas HTML e URLs 4D (4DATION...)” definido nas propriedades do método. Para maior informação consulte a seção Conexões de Segurança.

Nota de compatibilidade: Essa etiqueta substitui 4DHTMLVAR a partir da versão 12.2 de 4D. A etiqueta 4DHTMLVAR ainda é compatível, mas devido a legibilidade de código, é recomendado usar a etiqueta 4DHTML para inserir no código HTML

Sintaxe: <!--#4DSCRIPT/NomeMetodo/MeuParam-->

A etiqueta 4DSCRIPT lhe permite executar métodos 4D no momento do envio de páginas HTML estáticas. A presença da etiqueta <!--#4DSCRIPT/MeuMétodo/MeuParam--> em uma página estática como um comentário HTML provoca a execução do método MeuMétodo com o parâmetro MeuParam como string em $1. Quando se carrega a página de inicio, 4D chama ao On Web Authentication Database Method (se existir). Se retorna True, 4D executa o método.

O método retorna texto em $0. Se a string começa com o caráter de código 1, se considera como HTML (o mesmo princípio que para as variáveis).

Nota: A execução de um método com 4DSCRIPT depende do valor do atributo “Disponível através as etiquetas HTML e URLs 4D (4DATION...)” definido nas propriedades do método. Para maior informação, consulte a seção Conexões de Segurança.

As análises dos conteúdos da página é feita quando WEB SEND FILE (.htm, .html, .shtm, .shtml) ou SEND HTML BLOB (blob de tipo text/html) for chamada.
Lembre que em modo não contextual, a análise é também feita quando uma URL aponta para um arquivo que tenha a extensão  “.shtm” ou “.shtml” (por exemplo http://www.server.com/dir/page.shtm).

Por exemplo, Insira o seguinte comentário “Hoje é<!--#4DSCRIPT/MIMETH/MIPARAM-->” em uma página estática. Quando se carregar a página, 4D chama ao On Web Authentication Database Method (se existir), depois chama ao método MEUMET e passa a string “/MEUPARAM” como parâmetro $1.

O método retorna texto em $0 (por exemplo “12/31/03”); a expressão “Hoje é <!--#4DSCRIPT/MEUMET/MEUPARAM––></span>--> : The method does not exist.<!--#4DSCRIPT/MIMETH/MIPARAM-->” se converte em “Hoje é 12/31/03”.

 O código do método MIMET é:
 C_TEXT($0`Este parâmetro sempre deve declarado
 C_TEXT($1`Este parâmetro sempre deve ser declarado
 $0:=String(Current date)


Nota: Um método chamado por 4DSCRIPT não deve chamar elementos de interface (DIALOG, ALERT...).

Como 4D executa os métodos em sua ordem de aparição, é muito possível chamar a um método que define o valor de muitas variáveis que estão referenciadas mais adiante no documento, qualquer que seja o modo que esteja utilizando.

Nota: Pode inserir tantos comentários <!--#4DSCRIPT...--> quantos queira em uma página estática.

Sintaxe: <!--#4DINCLUDE Path-->

Este comentário permite incluir, em uma página HTML, outra página HTML (indicado pelo parâmetro rota). Por padrão só se inclui o corpo da página HTML especificada, ou seja o conteúdo entre as etiquetas <body> e </body> (as etiquetas mesmas não são incluídas). Isso lhe permite evitar conflitos relacionados com as etiquetas presentes nos cabeçalhos. Entretanto se a página HTML especificada não contiver etiquetas <body></body>,  a página completa é incluída. Você deve verificar a consistência das meta etiquetas.

O comentário <!--#4DINCLUDE --> é muito útil para testes (<!--#4DIF-->) ou loops (<!--#4DLOOP-->). É muito conveniente incluir etiquetas em função de um criterio ou de maneira aleatoria.
Ao momento da inclusão, sem importar a extensão do nome do arquivo, 4D analiza a página chamada e depois insere os conteúdos (modificados ou não) na página que origina a chamada 4DINCLUDE.

A localização na caché web de uma página incluida com o comentário <!--#4DINCLUDE --> responde às mesmas regras que as páginas chamadas através um URL ou enviadas com o comando WEB SEND FILE .

Passe em rota, a rota de acesso ao documento a incluir. Advertência: no caso da etiqueta 4DINCLUDE, a rota de acesso é relativa ao documento em curso de análise, ou seja o documento “pai”. Utilize o caráctere barra oblíqua (/) como separador de pastas e os dois pontos (..) para subir um nível (sintaxe HTML).

Nota: quando utilizar a etiqueta 4DINCLUDE com o comando PROCESS 4D TAGS, a pasta por padrão é a pasta que contém o arquivo de estrutura do banco.

O número de <!--#4DINCLUDE rota--> dentro de uma página é ilimitado. Entretanto, as chamadas a <!--#4DINCLUDE rota--> só podem ser realizadas a um nível. Isso significa que, por exemplo, não pode inserir o comentário <!--#4DINCLUDE meudoc3.html--> no corpo da página meudoc2.html, chamada por <!--#4DINCLUDE meudoc2--> inserido em meudoc1.html.

Além disso, 4D verifica que as inclusões não sejam recursivas.

Em caso de erro, o texto inserido é da forma "<!--#4DINCLUDE rota--> :Não se pode abrir o documento".

Exemples

<!--#4DINCLUDE subpage.html-->
<!--#4DINCLUDE folder/subpage.html-->
<!--#4DINCLUDE ../folder/subpage.html-->

4DBASE  

Syntax: <!--#4DBASE folderPath-->

The <!--#4DBASE --> tag designates a working directory that is used by the <!--#4DINCLUDE--> tag.
When it is called in a Web page, the <!--#4DBASE --> tag modifies all subsequent <!--#4DINCLUDE--> calls on this page, until the next  <!--#4DBASE -->, if any. If the <!--#4DBASE --> folder is modified from within an included file, it retrieves its original value from the parent file. 

The folderPath parameter must contain a pathname relative to the current page and it must end with a slash (/). The designated folder must be located inside the Web folder.
Pass the WEBFOLDER keyword to restore the default path (relative to the page). 

Thus the following code (4D v12), which must specify a relative path for each call:

<!--#4DINCLUDE subpage.html--> 
<!--#4DINCLUDE folder/subpage1.html-->
<!--#4DINCLUDE folder/subpage2.html-->
<!--#4DINCLUDE folder/subpage3.html-->
<!--#4DINCLUDE ../folder/subpage.html-->

... can be rewritten using the <!--#4DBASE --> tag:

<!--#4DINCLUDE subpage.html--> 
<!--#4DBASE folder/-->
<!--#4DINCLUDE subpage1.html-->
<!--#4DINCLUDE subpage2.html-->
<!--#4DINCLUDE subpage3.html-->
<!--#4DBASE ../folder/-->
<!--#4DINCLUDE subpage.html-->
<!--#4DBASE WEBFOLDER-->

Example  

Definição de um escritório para a página de início utilizando a etiqueta <!--#4DBASE -->:

/* Index.html */
<!--#4DIF LangFR=True-->
    <!--#4DBASE FR/-->
<!--#4DELSE-->
    <!--#4DBASE US/-->
<!--#4DENDIF-->
<!--#4DINCLUDE head.html-->
<!--#4DINCLUDE body.html-->
<!--#4DINCLUDE footer.html-->

No arquivo head.html, a pasta atual se modifica via <!--#4DBASE -->, sem que mude seu valor em Index.html:

/* Head.htm */
/* o escritório de trabalho aqui é relativo ao arquivo incluído (FR/ ou US/) */
<!--#4DBASE Styles/-->
<!--#4DINCLUDE main.css-->
<!--#4DINCLUDE product.css-->
<!--#4DBASE Scripts/-->
<!--#4DINCLUDE main.js-->
<!--#4DINCLUDE product.js-->

Sintaxe: <!--#4DIF expression--> <!--#4DELSE--> <!--#4DENDIF-->

Utilizado com os comentários <!--#4DELSE--> (opcional) e <!--#4DENDIF-->, o comentário <!--#4DIF expresion--> oferece a possibilidade de executar código HTML de maneira condicional.

O parâmetro expresion pode conter toda expressão 4D válida devolvendo um valor booleano. Deve estar entre parêntese e cumprir com as regras de sintaxe de 4D.

Os blocos <!--#4DIF expression--> ... <!--#4DENDIF--> podem estar aninhados em vários níveis. Como em 4D, cada <!--#4DIF expression--> deve ter um <!--#4DENDIF--> correspondente.

Em caso de um erro de interpretação, o texto “<!--#4DIF expression-->: Se esperava uma expresão booleana” se insere ao invés do conteúdo situado entre <!--#4DIF --> e <!--#4DENDIF-->.

Da mesma forma, se não houver tantos <!--#4DENDIF--> quantos <!--#4DIF -->, o texto “<!--#4DIF expression-->: 4DENDIF esperado” é inserido ao invés dos conteúdos localizados entre <!--#4DIF --> e <!--#4DENDIF-->.

Esse exemplo de código inserido em uma página de HTML estática exibe uma etiqueta diferente de acordo com o resultado da expressão  vname#""

<BODY>
...
<!--#4DIF (vname#"")-->
Nomes que começam com <!--#4DTEXT vname-->.
<!--#4DELSE-->
Nenhum nome foi encontrado.
<!--#4DENDIF-->
...
</BODY>

Este exemplo insere páginas diferentes em função do usuário conectado:

<!--#4DIF LoggedIn=False-->
    <!--#4DINCLUDE Login.htm -->
<!--#4DELSEIF User="Admin" -->
    <!--#4DINCLUDE AdminPanel.htm -->
<!--#4DELSEIF User="Manager" -->
    <!--#4DINCLUDE SalesDashboard.htm -->
<!--#4DELSE-->
    <!--#4DINCLUDE ItemList.htm -->
<!--#4DENDIF-->

Sintaxe: <!--#4DLOOP condition--> <!--#4DENDLOOP-->

Este comentário permite a repetição de uma parte de código HTML desde que se cumpra a condição. A porção está delimitada por <!--#4DLOOP--> e <!--#4DENDLOOP-->.

Os blocos <!--#4DLOOP condicion--> ... <!--#4DENDLOOP--> podem estar aninhados. Como em 4D, cada <!--#4DLOOP condicion--> deve ter um <!--#4DENDLOOP--> correspondente.

Há três tipos de condições:

  •  <!--#4DLOOP [tabela]-->
    Esta sintaxe realiza um loop para cada registro desde a seleção atual da tabela no processo atual. A porção de código HTML localizada entre os dois comentários se repite para cada registro da seleção atual.

Nota: quando a etiqueta 4DLOOP se utiliza com uma tabela, os registros se carregam em modo só letura.

  • <!--#4DLOOP [table]-->
    Esta sintaxe realiza um loop para cada registro desde a seleção atual da tabela no processo em atual. A porção de código HTML localizada entre os dois comentários se repete para cada registro da seleção atual.
O seguinte código HTML:

<!--#4DLOOP [Pessoas]-->
<!--#4DTEXT [Pessoas]Nome--> <!--#4DVAR [Pessoas]Sobrenome-><BR>
<!--#4DENDLOOP-->


... pode ser traduzido em linguagem 4D como:

 FIRST RECORD([Pessoas])
 While(Not(End selection([Pessoas])))
    ...
    NEXT RECORD([Pessoas])
 End while
  • <!--#4DLOOP array-->
    Esta sintaxe realiza um loop para cada elemento do array. O elemento atual do array se incrementa quando se repete a porção de código HTML.
Nota: esta sintaxe não pode ser utilizada com arrays de duas dimensões. Neste caso, é melhor combinar um método com loops aninhados.

O seguinte exemplo de código HTML:

<!--#4DLOOP arr_names-->
<!--#4DTEXT arr_names{arr_names}--><BR>
<!--#4DENDLOOP-->

... pode ser traduzida em linguagem 4D da seguinte maneira:

 For($Elem;1;Size of array(arr_names))
    arr_names:=$Elem
    ...
 End for
  • <!--#4DLOOP metodo-->
    Esta sintaxe realiza um loop enquanto o método retorna True. O método admite um parâmetro de tipo Inteiro longo. Primeiro se chama com o valor 0 para permitir uma fase de inicialização (se for necessária); depois se chama com os valores 1, 2, 3, ... enquanto retorna True.
Por razões de segurança, o Método de banco On Web Aunthentication pode ser chamada, só uma única vez, antes da fase de inicialização (execução do método com 0 como parâmetro). Se se confirma a autenticação, se se realiza a fase de inicialização.

Advertência
: C_BOOLEAN($0) e C_LONGINT($1) DEVEM ser declaradas dentro do método por motivos de compilação.

O exemplo de código HTML seguinte:

<!--#4DLOOP meu_metodo-->
<!--#4DTEXT var--> <BR>
<!--#4DENDLOOP-->

... pode ser traduzida em linguagem 4D da seguinte maneira:

 If(AuthenticationWebOK)
    If(meu_metodo(0))
       $counter:=1
       While(meu_metodo($counter))
          ...
          $counter:=$counter+1
       End while
    End if
 End if

O método meu_metodo pode ser realizado dessa forma:

 C_LONGINT($1)
 C_BOOLEAN($0)
 If($1=0)
  `Initialisação
    $0:=True
 Else
    If($1<50)
       ...
       var:=...
       $0:=True
    Else
       $0:=False `Para o loop
    End if
 End if

Em caso de um erro de interpretação, o texto “<!--#4DLOOP expression-->: Descrição” é inserido em vez do conteúdo localizado entre <!--#4DLOOP --> e <!--#4DENDLOOP-->.

Pode aparecer uma das seguintes mensagens:
- Não se esperava uma expresão deste tipo (erro padrão)
- Nome de tabela incorreto (erro no nome da tabela)
- Um array era esperado (a variável não é um array ou é um array de duas dimensões)
- O método não existe
- Erro de sintaxe (quando o método for executado)
- Erro de acesso (não tem os privilégios de acesso apropriados para acessar a tabela ou ao método)
- 4DENDLOOP esperado (o número de <!--#4DENDLOOP--> não corresponde a <!--#4DLOOP -->).

 
PROPRIEDADES 

Produto: 4D
Tema: Web Server

 
VER TAMBÉM 

Ações URL e Formulário
Binding 4D objects with HTML objects
PROCESS 4D TAGS

 
PALAVRAS CHAVES 

4DVAR, 4DTEXT, 4DHTMLVAR, 4DHTML, 4DSCRIPT, 4DINCLUDE, 4DIF, 4DLOOP, 4DELSEIF

 
ARTICLE USAGE

Manual de linguagem 4D ( 4D v14 R2)
Manual de linguagem 4D ( 4D v14 R3)
Manual de linguagem 4D ( 4D v13.5)
Manual de linguagem 4D ( 4D v14.3)

Inherited from : Etiquetas HTML 4D ( 4D v12.4)
Parent of : Etiquetas HTML 4D ( 4D v14 R4)