Você está na página 1de 15

Zope Page Templates Tutorial

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.

Marcello Peixoto Bax SUMRIO

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

Marcello Peixoto Bax

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

Marcello Peixoto Bax

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.

2 Criando uma Pgina ZPT


Aquelas pessoas que j trabalham com a criao de pginas web hospedadas em servidores Zope, utilizam provavelmente FTP ou WebDAV ao invs da Zope Management Interface (ZMI). Para os exemplos simples deste documento, mais conveniente utilizar ZMI, Consulte seu administrador Zope para instrues sobre como aceder ZMI. Administradores ou programadores provavelmente j utilizam ZMI, pelo menos ocasionalmente. Pode-se tambm utilizar emacs, cadaver http://www.webdav.org/cadaver ou algum outro editor cliente. Confira o Guia de Administrao de Zope para poder utilizar Zope com estes diferentes clientes. Para executar os exemplos apresentados aqui, utilize seu navegador Internet para abrir uma sesso em ZMI. Escolha um diretrio (Folder) qualquer, o root, por exemplo, e escolha "Page Template" da lista de escolhas dos componentes de Zope. Escreva simple_page nos campo id, e clique no boto Add and Edit.

Pgina 5 de 5

Marcello Peixoto Bax

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

Marcello Peixoto Bax

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

Marcello Peixoto Bax </tr> </table>

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.

9 Mistura de atributos e seqncia de avaliao das declaraes


Como se pde ver no exemplo do template, permitido inserir vrias declaraes TAL no mesmo tag. Contudo, deve-se atentar para 3 coisas: -S uma mesma ocorrncia de declarao TAL pode ser utilizada num mesmo tag. Isso porque o HTML no permite se ter vrios atributos com o mesmo nome. Por exemplo, no se pode ter mais de um tal:define no mesmo tag. - As declaraes tal:content e tal:replace no podem ser utilizadas no mesmo tag, j que entrariam em conflito bvio. - A ordem na qual se escreve os atributos TAL num tag no afeta a ordem na qual sero executados. Independentemente da ordem na qual so colocadas as declaraes TAL, estas sempre sero executadas nesta ordem: define, condition, repeat, content/replace, attributes. Para contornar estes limites, pode-se acrescentar outras tags e dividir as declaraes entre estes tags. Se no h nenhum tipo de tag que corresponda ao mais adequado, pode-se utilizar os tags estruturantes span ou div. Por exemplo, caso queira declarar uma varivel para cada repetio de um determinado pargrafo, no pode inserir a declarao tal:define juntamente com tal:repeat, isso porque pela seqncia de avaliao padro, a definio faz-se antes de todas as repeties. Para resolver este problema, pode escrever do seguinte modo:

<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

Marcello Peixoto Bax

10 Declaraes com vrias partes


Caso seja necessrio definir vrios atributos em um mesmo tag, no pode faz-lo atravs de vrios tal:attributes e, nesse caso, obvio que coloca-los em vrios tag diferentes no resolver. As declaraes tal:attributes e tal:define podem ter ambas vrias partes numa mesma declarao. Para isso deve-se separar estas partes por ";", se existe ";" dentro da expresso de uma destas declaraes, necessrio ento duplicar o sinal de ponto e vrgula: ";;". Eis um exemplo onde os atributos alt e src de uma imagem so definidos: <img src="default.jpg" tal:attributes="src item/icon; alt item/id"> Eis um outro exemplo de definio de mltiplas variveis: <span tal:define here/objectIds"> = "global logo here/logo.gif; ids

11 As cadeias de caracteres (strings)


As expresses "cadeias de caracteres" permitem utilizar variveis globais Zope (path expression). Cada uma destas variveis deve ser precedida de "$". Se h vrias partes, ou se necessrio separa-las do texto que segue, devem ser postas entre "{}". Como o texto est dentro de um atributo, vocs no pode usar aspas (") para delimitar a varivel. Como o sinal "$" utilizado para assinalar uma varivel, o caracter "$" deve ser escrito "$$". Eis alguns exemplos: "string:Just text." "string: $year, by Me." "string:Three ${vegetable}s, please." "string:Your name is ${user/getUserName}!"

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

Marcello Peixoto Bax

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.

13 Outras variveis internas


Conforme j foi visto, alguns exemplos de variveis internos, template, gastar, repeat, e pedido. Eis uma lista completa das outras variveis internas e a sua utilizao: nothing: este valor falso, semelhante a uma string vazia, que pode ser utilizado com tal:replace ou tal:content para apagar um tag ou o seu contedo. Se define um atributo como nothing, o atributo retirado do tag, contrariamente um string vazio; default: um valor especial que no altera nada quando utilizado com tal:replace, tal:content ou tal:attributes. Deixa o texto do template inalterado; option: um dicionrio de valores, se existe, os valores passaram ao template. attrs: um dicionrio de atributos do tag que correm em do template. As chaves so os nomes dos atributos e os valores so os valores originais dos atributos no template. root: objeto raiz de Zope. Utilizam este objeto quando quer aceder objetos Zope a partir de uma posio fixa, independentemente do lugar do template ou a lugar da qual chamado. here: objeto no qual o template chamado. Frequentemente a mesma coisa que utilizar container, mas pode ser diferente se utiliza-se o mecanismo de aquisio Zope. Utilizar este objeto para aceder objetos Zope que espera-se a encontrar em lugares diferentes dependentes da chamada o template. container: Em geral um Folder no qual encontra-se o template. Utilizado para aceder aos objetos Zope a partir de posies relativas ao lugar onde encontra-se o template.

Pgina 13 de 13

Marcello Peixoto Bax

14 Caminhos (paths) alternativos


O caminho template/title existe sempre que o template utilizado, embora possa ser uma cadeia vazia. Certos caminhos como request/form/x, poderiam no existir quando o template foi elaborado. Isso causa em geral um erro na hora da avaliao do caminho. Quando um caminho no existe, seria interessante ter-se um caminho padro (default) a utilizar. Por exemplo, se request/form/x no existe, seria desejvel utilizar here/x no lugar. Pode-se fazer isso listando os caminhos por ordem de preferncia, separados por barras verticais "|": <h4 tal:content="request/form/x | here/x">Header</h4> Duas variveis muito teis a inserir em fim de listas de caminhos alternativos, so default e nothing. Utiliza-se nothing para apagar o resultado se nenhum dos caminhos for encontrado, ou default para deixar o texto por default. Pode-se tambm testar do existncia diretamente utilizando-se a palavra reservada exists:. Um caminho prefixado com exists: verdadeiro se o caminho existe e falso no caso contrrio. Estes dois exemplos afixam uma mensagem de erro apenas se alguma mensagem for passada pelo objeto request: <h4 tal:define="err request/form/errmsg | nothing" tal:condition="err" tal:content="err">Error!</h4> <h4 tal:condition="exists:request/form/errmsg" tal:content="request/form/errmsg">Error!</h4>

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

Marcello Peixoto Bax

16 Utilizao da palavra reservada estrutura


Em geral, as declaraes tal:replace e tal:content convertem o conjunto dos caracteres especiais do HTML do texto que inserem, por exemplo substituem < por <. Se no se quer operar tais modificaes sobre o texto, deve-se preceder a expresso pela palavra reservada estrutura. Dada a varivel copyright, as 2 linhas seguintes: <span tal:replace="copyright">Copyright 2000</span> <span tal:replace="structure copyright">Copyright 2000</span> gerariam 2001 By <b>Me</b>" and " 2001 By Me" respectivamente. Esta caracterstica muito til quando se quer inserir um fragmento de cdigo HTML armazenado numa propriedade, arquivo ou gerado por um objeto Zope. Por exemplo, podese ter elementos news que contm cdigo HTML simples como texto em negrito e itlico quando gerado, e quer-se preservar isso ao inseri-los na pgina Top News. Neste caso, poder-se-ia escrever: <p tal:repeat="article topnewsitems" tal:content="structure article">A News Article</p>

>> 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

Você também pode gostar