Escolar Documentos
Profissional Documentos
Cultura Documentos
Marcello Peixoto Bax Escola de Cincia da Informao Universidade Federal de Minas Gerais (UFMG). Abril de 2003.
O texto foi escrito a partir do trabalho de Thierry MICHEL.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
INTRODUO........................................................................................................................................................3 CRIANDO UMA PGINA ZP T..........................................................................................................................5 EXPRESSES SIMPLES .....................................................................................................................................6 INSERO DE TEXTO........................................................................................................................................7 ESTRUTURAS REPETITIV AS..........................................................................................................................7 ELEMENTOS CONDICIONAIS........................................................................................................................8 DEFINIO DE VARIVEIS ............................................................................................................................9 MUDANA DE ATRIBUTOS .......................................................................................................................... 10 MISTURA DE ATRIBUTOS E SEQNCIA DE AVALIAO DAS DECLARAES............ 11 DECLARAES COM VRIAS PARTES ................................................................................................. 12 AS CADEIAS DE CARACTERES (STRINGS)........................................................................................... 12 EXPRESSO NOCALL ..................................................................................................................................... 12 OUTRAS VARIVEIS INTERNAS ............................................................................................................... 13 CAMINHOS (PATHS) ALTERNATIVOS .................................................................................................... 14 ELEMENTOS SIMPLES ................................................................................................................................... 14 UTILIZAO DA PALAVRA RESERVADA ESTRUTURA................................................................ 15
Pgina 2 de 2
1 Introduo
Zope Page Templates (ou linguagem de templates Zope) um instrumento do servidor de aplicao Zope para a gerao de pginas web dinmicas. ZPT facilita a colaborao entre programadores e designers web aumentando a produtividade de pginas web dinmicas que constituem a interface de qualquer aplicao Zope. Zope um servidor de aplicaes Web de cdigo aberto, distribudo segundo a licena GPL. Nestes documentos descreve-se a ZPT para o atendimento de especificidades demandadas pela gesto de contedos. Os designers web podem usar ZPT para a criao e o acompanhamento/manuteno de pginas dinmicas, sem que para isso precisem abandonar seus instrumentos habituais de trabalho, e preservando, ao mesmo tempo, o esforo de programao feito para incluir as pginas numa aplicao. O objetivo proporcionar um fluxo de tarefas natural, sem que uma equipe (designers) atrapalhe o trabalho da outra (programadores). Um designer web utilizar um editor HTML WYSIWYG para criar o template, em seguida um programador poder edita-lo para que este possa comunicar com a aplicao, introduzindo os comandos ZPT necessrios. Seguindo as especificaes do projeto ou eventuais alteraes, mais tarde o designer web poder carregar o template no seu editor para fazer modificaes sobre a sua estrutura e sobre a sua aparncia. Tomando cuidado para preservar as mudanas efetuadas pelo programador, ele no correr o risco de desorganizar a aplicao. ZPT visa estes objetivos adotando 3 princpios: 1. Integrao fcil com os editores HTML. 2. Apesar dos cdigos de programa, a pgina aparece no editor WYSIWYG exatamente como apareceria em um navegador. 3. Manter o cdigo mais complexo (regras do negcio) fora dos templates. Uma pgina ZPT um modelo, ou molde (do termo da lngua inglesa template) para outras pginas que sero geradas a partir dela. Mais especificamente uma pgina ZPT uma pgina HTML vlida. Como o HTML altamente estruturado, e os editores WYSIWYG preservam esta estrutura, existem limites muito estritos para que os programadores alterem uma pgina sem desrespeitar o primeiro princpio acima.
Para quem so feitas as pginas ZPT? As pginas templates foram especialmente feitas para os programadores e designers web que tm a necessidade de trabalhar juntos para a criao de pginas web dinmicas. Um programador que edita suas prprias pginas web com um editor de texto, pode no ter
Pgina 3 de 3
Marcello Peixoto Bax necessidade de utilizar ZPT. No entanto, pginas ZPT podem ser mais simples de utilizar e mais facilmente compreensveis do que pginas DTML.
Por que ter definido mais uma nova linguagem? Existe um grande nmero de linguagens para a criao de templates, das quais algumas so bastante populares, como por exemplo, ASP, JSP e PHP. Por que inventar outra? Em primeiro lugar, nenhuma destas linguagens foi criada para designers web, ou pensando neles. Uma vez que a pgina foi convertida em um template contendo scripts que geram contedos dinamicamente, a pgina no mais uma pgina HTML vlida, tornando-a de difcil manipulao fora da aplicao, por um editor HTML WYSIWYG. Ou seja, nenhuma delas respeita o primeiro e segundo princpios do ZPT. Os programadores no deveriam ter de apropriar-se "fora" do conhecimento de designers web para alterar cdigo HTML em aplicao; cada profissional deve dominar sua tarefa, especializando-se em design ou em programao. XMLC, que faz parte do projeto Enhydra, compartilha esse ponto de vista, mas obriga os programadores a escrever uma grande quantidade de cdigo Java na montagem do template. Este documento no trata desta ferramenta. O projeto Enhydra deixou de ser um projeto Open Source, aps desentendimentos com a SUN Microsystems sobre o licenciamento da plataforma J2EE.
Aplicao dos princpios ZPT tem uma linguagem denominada TAL ( emplate Attribute Language) que consiste de T uma srie de atributos especiais adicionados aos tags HTML. Por exemplo, uma pgina dinmica ZPT poderia assemelhar-se isto: <title tal:content=here/title>Page Title</title> O atributo tal:content um enunciado de TAL. Perceba a presena de um espao de nomes1 XML (a parte tal:), a maior parte dos editores HTML no d ateno, no se incomoda, com a parte que no compreensvel por eles e no suprime os atributos que considera estranhos. Dessa forma a estrutura ou a aparncia da pgina no ser alterada quando interpretada por um editor HTML ou um navegador Internet.As pginas TAL so interpretadas pelo servidor Zope, uma vez demandadas pelo navegador. Em TAL, o nome content indica que o contedo do tag HTML title ser atualizado, e here/title uma expresso da qual o resultado ser o texto a inserir no corpo do tag title.
1
Um espao de nomes XML identificado por uma URI, e define os elementos vlidos naquele escopo.
Pgina 4 de 4
Este exemplo demonstra tambm o respeito ao segundo princpio: quando voc v o template num editor HTML, o texto do tag title ocupa o lugar do texto dinmico, que ser gerado quando a pgina for interpretada pelo Zope. O template pode ento ser considerado como um exemplo fiel de representao dos documentos como aparecero mais tarde no navegador, o que facilita bastante o trabalho dos designers. Existem comandos TAL que substituem a totalidade do tag (incluindo suas marcas e seu contedo/contexto), apenas o seu contedo, ou simplesmente apenas seus atributos. Com comandos TAL, voc pode fazer repetir vrias vezes um tag ou retir-lo inteiramente. Todas estas caractersticas, juntas, permitem definir a estrutura dos documentos e gerar seu contedo dinamicamente. Porm, apesar de relativamente potente, utilizando TAL no se pode criar sub-rotinas ou classes, escrever laos (loops) complicados ou testes de mltipla escolha, ou realizar algoritmos complexos. A linguagem TAL no deliberadamente to potente e de uso universal como uma linguagem de programao padro. Com efeito, ela foi feita para ser utilizada dentro de uma arquitetura (como Zope, por exemplo) na qual outros objetos iro tomar para si a responsabilidade de gerar a lgica de negcio da aplicao, tarefas independentes da pgina com a diagramao visual HTML. Em geral os cdigos de uma aplicao Zope so escritos na linguagem Python. Por exemplo, TAL seria muito til para a gerao de uma fatura, criando uma linha para cada elemento, e inserindo a descrio, a quantidade, o preo, etc. Embora ela no ser utilizada para criar o registro da fatura no interior da base de dados ou para interagir com um sistema de pagamento, por exemplo.
Pgina 5 de 5
A pgina de edio principal mostra ento a nova Pgina Template. O ttulo no est definido, o tipo do contedo text/HTML, e o template criado por default est em edio. Vamos criar uma pgina dinmica muito simples. Para isso basta inserir, por exemplo, as palavras Simple Page no campo Title. Em seguida, edite o contedo do template para obter isto: This is <b tal:replace="template/title">the Title</b>. Clique no boto Save Changes. A pgina de edio deveria emitir uma mensagem de confirmao, assinalando que as modificaes foram registradas com sucesso. Se o texto contm na sua rubrica, <- Page Template Diagnostics, voc deve verificar se a sintaxe do texto do exemplo acima est correta, em caso de erro corrigir e em seguida salvar novamente as alteraes. A mensagem de erro desaparece automaticamente uma vez corrigido o erro. Clique no link Test. O navegador deve mostrar: This is Simple Page. Volte pgina precedente (Boto back do navegador) e clique no link Browse HTML Source debaixo do campo Content-Type. Voc deveria ento ver This is the Title. Volte outra vez pgina precedente, voc est agora pronto para editar outros exemplos.
3 Expresses simples
O texto template/title, na pgina template simples da seo anterior, uma expresso de caminho (path expression). a expresso mais comumente utilizada entre os tipos definidos por TAL Expression Syntax (TALES). Ela procura o atributo title do template. Eis outras expresses gerais: 1. request/URL: o URL do pedido web corrente. 2. user/getUserName: o nome de ligao do utilizador autenticado. 3. container/objectIds: a lista dos ids dos objetos contidos no mesmo diretrio que a Pgina Template. Cada path comea com o nome de uma varivel. Se a varivel contm o valor que desejado, para-se l. Caso contrrio, deve-se acrescentar "/" e o nome de outro objeto ou de um atributo/mtodo. Voc poderia ter necessidade de navegar atravs de vrios objetos antes de encontrar o valor que procura. H um pequeno conjunto de variveis bsicas, como request e user, que sero descritas mais adiante no texto. Pode-se tambm definir variveis prprias.
Pgina 6 de 6
4 Insero de texto
O template simple_page, utilizou o atributo tal:replace no tag HTML Bold. Quando do teste, a totalidade do tag foi substituda pelo ttulo do template. Ao consultar o cdigo fonte, voc verificou que o texto do template estava em negrito. Utilizou o tag Bold para destacar a diferena. Para inserir texto dinmico dentro de outros textos, voc utilizar em geral a expresso tal:replace. Acrescente as linhas seguintes ao exemplo: <br> The URL is <span tal:replace="request/URL">URL</span>. O tag span estrutural e no visual, por conseguinte vamos obter: The URL is URL, olhando o a parti de um editor HTML ou em um navegador Internet. Ateno neste caso para no destruir o span ou inserir tags de formatao como <b> ou <font> dado que eles tambm sero substitudos. Se quer inserir do texto dentro de um tag, mas deixar o tag ele mesmo nico, deve utilizar tal:content. Para definir o ttulo do vosso exemplo como o atributo title da pgina template, acrescentam as linhas seguintes acima do texto. <head> <title tal:content="template/title">The Title</title> </head> Abre-se a pgina clicando em Test numa outra janela, o ttulo da janela estar Simple Page.
5 Estruturas repetitivas
Agora vamos acrescentar nossa pgina uma lista de objetos que se encontram no mesmo diretrio. Vamos criar uma tabela cujas linhas sero numeradas em uma coluna, alm das colunas para id, metatype e title. Acrescente esta linha parte inferior do exemplo: <table border="1" width="100%"> <tr> <th>#</th><th>Id</th><th>Meta-Type</th><th>Title</th> </tr> <tr tal:repeat="item container/objectValues"> <td tal:content="repeat/item/number">#</td> <td tal:content="item/id">Id</td> <td tal:content="item/meta_type">Meta-Type</td> <td tal:content="item/title">Title</td>
Pgina 7 de 7
O atributo tal:repeat aplicada sobre as linhas significa: repita esta linha para cada objeto do container. O atributo repeat atribui os objetos da lista, um um, varivel item, e criada uma cpia da linha para cada objeto utilizando esta varivel. O valor item/id em cada linha o atributo id do objeto para a linha corrente. O nome item da varivel no especial; poder-se-ia utilizar qualquer nome desde comeasse por uma letra e que contenha apenas letras, nmeros ou "_". A varivel existe apenas no tag no qual encontra-se o atributo tal:repeat, no caso acima o tag <tr>; Se deseja utiliza-la o fora do tag, obter um erro. Cada linha no exemplo numerada, o que implica o conhecimento do nmero corrente. Poderia tambm querer identificar se uma linha especfica a primeira ou a ltima ou outras informaes similares. Em cada cpia da linha, a varivel item representa um objeto da lista. Este objeto no est consciente do lao, sabe nada a respeito do loop, por conseguinte no existe atributo especfico do objeto que permita extrair informaes sobre o lao. A varivel interna repeat foi criada exatamente para isso. Se pe o nome da varivel de contedo (item no caso), aps a varivel repeat, pode aceder contagem do lao a partir de zero (index), partir de 1 (number), partir de "A" (Letter), e de diferentes outras maneiras. Por conseguinte, a expresso repeat/item/number igual 1 na primeira linha, 2 na segunda, etc. Dado que se pode inserir a expresso tal:repeat no interior de outra expresso tal:repeat, vrios laos podem estar ativos por vez. Por essa razo deve-se usar repeat/item/number ao invs de repeat/number, ou seja, simplesmente para obter informaes do tal:repeat correto, aquele que criou a varivel item.
6 Elementos condicionais
Analise o template, e notar que a tabela est bastante simplificada. Faamos de sorte a preencher alternativamente o fundo das linhas, isso vai melhorar o visual da tabela. Copie a segunda linha da tabela, para obter isto: <table border="1" width="100%"> <tr> <th>#</th><th>Id</th><th>Meta-Type</th><th>Title</th> </tr> <tbody tal:repeat="item container/objectValues"> <tr bgcolor="#EEEEEE" tal:condition="repeat/item/even"> <td tal:content="repeat/item/number">#</td> <td tal:content="item/id">Id</td> <td tal:content="item/meta_type">Meta-Type</td>
Pgina 8 de 8
Marcello Peixoto Bax <td tal:content="item/title">Title</td> </tr> <tr tal:condition="repeat/item/odd"> <td tal:content="repeat/item/number">#</td> <td tal:content="item/id">Id</td> <td tal:content="item/meta_type">Meta-Type</td> <td tal:content="item/title">Title</td> </tr> </tbody> </table> A expresso tal:repeat no se alterou, deslocamo-la simplesmente para um novo tag tbody. um tag padro HTML que permite agrupar o corpo das linhas de uma tabela. H duas linhas no corpo, com colunas idnticas, das quais uma tem fundo cinza. Visualize o cdigo fonte do template e verifique as duas linhas. Se no acrescentar o atributo tal:condition s linhas, o template ser gerado com duas linhas para cada objeto, o que no bem o que se quer obter. O atributo tal:condition sobre a primeira linha assegura que esta ser gerada apenas se o nmero da linha par, ao passo que a condio da segunda linha permitir gera-la apenas se o nmero mpar. O atributo tal:condition no faz nada se o resultado da avaliao de sua expresso verdadeiro, mas suprime o tag em totalidade, juntamente com seu contedo, se falso. Os atributos odd e even de repeat/item so quer 0, quer 1. O nmero 0, uma cadeia vazia, uma lista vazia e a varivel interna nothing so expresses falsas. Quase todos os outros valores so verdadeiros, incluindo os nmeros no iguais a 0 e as cadeias de caracteres que contenham qualquer coisa (mesmo espaos!).
7 Definio de variveis
O template mostra sempre pelo menos uma linha, dado que o prprio template ele mesmo um dos objetos listados. Em outras circunstncias, entretanto, poder-se-ia desejar ter em conta o fato de que a tabela pudesse estar vazia, sem elementos. Neste caso o mais interessante seria simplesmente suprimir a tabela. Pode-se fazer isso posicionando uma condio no interior do tag table: <table border="1" width="100%" tal:condition="container/objectValues" Agora, quando no h elementos, a tabela no ser gerada. Porm quando h objetos, a expresso container/objectValues ser avaliada duas vezes, o que no muito eficaz. Alm disso, se quiser alterar a expresso, dever altera-la em 2 lugares. Para evitar estes problemas, pode-se definir uma varivel para manipular a lista gerada, e utiliza-la nos
Pgina 9 de 9
Marcello Peixoto Bax atributos tal:condition e tal:repeat. Altere a primeira linha da tabela para obter isto: <table border="1" width="100%" tal:define="items container/objectValues" tal:condition="items"> <tr> <th>#</th><th>Id</th><th>Meta-Type</th><th>Title</th> </tr> <tbody tal:repeat="item items"> O atributo tal:define cria a varivel items, que poder ser utilizada por toda a parte dentro do tag da table. Agora, suponha que queiramos apresentar uma mensagem e no simplesmente suprimir a tabela quando no h elementos. Para fazer isso, insira na tabela acima: <h4 tal:condition="not:container/objectValues">There Are No Items</h4> No se pode utilizar a varivel items aqui, porque esta ainda no foi definida. Se a definirmos no tag h4, no ela poder ser utilizada na tabela, porque tornar-se-ia uma varivel local ao tag h4. Poderia-se defini-la dentro de um tag que englobaria os dois, mas existe uma soluo mais simples. Utilizando a palavra-chave global na frente do nome da varivel, define-se a varivel do tag h4 na parte inferior do template. <h4 tal:define="global items container/objectValues" tal:condition="not:items">There Are No Items</h4> <table border="1" width="100%" tal:condition="items"> A expresso not: no primeiro atributo tal:condition pode ser colocada na frente de qualquer expresso. Se a expresso verdadeira, not: a torna falsa e vice-versa.
8 Mudana de atributos
A maior parte, se no todos, os objetos listados pelo template tm um atributo icon, que contm o caminho para o cone do tipo do objeto. De maneira a mostrar este cone na coluna meta-type, seria necessrio inserir este caminho no atributo src do tag img, alterando as duas colunas, dessa forma: <td><img src="/misc_/OFSP/Folder_icon.gif" tal:attributes="src item/icon"> <span tal:replace="item/meta_type">Meta-Type</span> </td>
Pgina 10 de 10
Marcello Peixoto Bax O atributo tal:attributes substitui o atributo src de uma imagem com o valor item/icon. O valor de em src do template age como um substituto, assim a imagem ser inserida sempre conforme o objeto, alm do mais no seu tamanho correto. Dado que o atributo tal:content inserido na clula da tabela deveria substituir a totalidade do contedo da clula, a imagem includa, pelo texto meta-type, seria suprimida. Assim, a soluo inserir meta-type diretamente da mesma maneira que a URL no exemplo do incio do documento.
<div tal:repeat="p phrases"> <p tal:define="n repeat/p/number"> Phrase numro <span tal:replace="n">1</span> est "<span tal:replace="p">Phrase</span>".</p> </div> <p tal:repeat="p phrases"> <span tal:define="n repeat/p/number"> Phrase numro <span tal:replace="n">1</span> est "<span tal:replace="p">Phrase</span>".</span> </p>
Pgina 11 de 11
12 Expresso Nocall
Em geral, a chamada de uma URL tenta gerar o objeto correspondente. Isso significa que se o objeto uma funo ( Script, Method), ou qualquer outra espcie de cdigo executvel, a chamada da URL avaliar o resultado do objeto chamado. , em geral, o que se quer, mas no sempre. Por exemplo, caso se queira atribuir um Documento DTML uma varivel e poder aceder s suas propriedades, no se pode utilizar uma chamada de URL, porque esta voltar o documento como uma cadeia de caracteres.Ver Anotaes na ltima pgina.
Pgina 12 de 12
Caso seja inserida a expresso nocall no incio do caminho ( ath), o objeto chamado no p ser avaliado, mas simplesmente retornado. Por exemplo: <span tal:define="doc nocall:here/aDoc" tal:content="string:${doc/id}: ${doc/title}"> Id: Title</span> Este tipo de expresso muito importante quando se quer definir uma varivel que deve conter uma funo, uma classe de um mdulo, para seguidamente utiliza-la numa expresso Python.
Pgina 13 de 13
15 Elementos simples
Pode-se incluir elementos que so visveis no template mas no no texto gerado utilizando a varivel interna nothing, assim: <tr tal:replace="nothing"> <td>10213</td><td>Example Item</td><td>$15.34</td> </tr> Isto pode ser muito til para preencher partes de uma pgina de modo que assemelhe-se mais pgina gerada que ao template. Por exemplo, uma tabela que deva ter 10 linhas, ter apenas uma linha no template. Acrescentando 9 outras linhas, o template assemelhar-se- mais ao resultado final.
Pgina 14 de 14
>> FIM << Anotaes: Expresso Nocall: Considere que os objetos do ZOPE possuem um mtodo privado chamado __call__() que executado quando estes objetos so requisitados pela URL, como por exemplo uma chamada a um DTML Method. A expresso Nocall faz com que no seja executado este mtodo e portanto retorna a instncia do objeto requisitado e no sua renderizao(resultado da chamada de __call_().
Pergunta: Como acessar objetos em TAL, atravs da sintaxe de dicionrios? Ex: Request[atributo].executaMetodo()
Pgina 15 de 15