Desenvolvimento - Python
ZPT - Zope Pages Templates
Este artigo faz uma introdução ao ZPT - Zope Pages Templates, linguagem muito utilizada dentro do excelente Zope e que serve para separar o código de programação (Python) do layout.
por Fábio Rizzo MatosIntrodução
Zope Pages Templates, ou simplesmente, ZPT, é uma linguagem de templates utilizada no Zope que permite que haja uma interatividade entre os programadores e os designers de uma forma muito agradável.
Com ZPT, o designer pode criar toda a página (seu layout) e colocar os campos (as tags) em seu lugar específico onde entrará a lógica (scripts em Python) do programador. Isso faz com que a página separe o visual da lógica.
Então, qual é o objetivo do ZPT? É ser uma linguagem que possibilite a feliz união do programador com o designer.
Dentro do ZPT, temos o TAL (Template Attribute Language), que adiciona uma série de tags especiais ao HTML. Um exemplo é:
Criando uma page templates com o nome de zpt01. Nome do Meu Page Template é <b tal:content="template/id">quero que apareça aqui outra coisa</b>
O que vai acontecer? O atributo tal:content="template/id" vai substituir o texto "quero que apareça aqui outra coisa" pelo nome do template.
O que será visto é:
Nome do Meu Page Template é zpt01
Interessante não é?
O que o ZPT faz é alterar o conteúdo entre as tags <b tal:content="template/id">bla bla bla</b> e colocar o texto do atributo tal.
Isso faz com que a página em seu código represente algo, que vai ser modificado quando a sua lógica entrar em funcionamento.
Poderia aparecer que o texto dado como exemplo fosse visto assim:
Nome do Meu Page Template é quero que apareça aqui outra coisa
Porém, ele substitui o texto entre as tags pelos atributos passados pelo tal.
Pode parecer confuso, mais vamos entender melhor criando um exemplo com ele.
Criando a primeira página ZPT
Acesse a sua ZMI (exemplo: http://localhost:8080/manage).
Dentro da ZMI, vamos no Root Folder do Zope e criaremos uma pasta chamada zpt01.
Dentro dessa pasta crie uma Page Template.
Coloque o nome de exemplo01.zpt e o title de Tutorial de ZPT.
Substitua o código que veio assim que você criou a ZPT por este:
<html> <head> <title tal:content="template/title">The title</title> </head> <body> <h1>Meu Primeiro ZPT - <span tal:replace="here/title_or_id">texto de título</span></h1> </body> </html>
Salve o arquivo e clique em "test" para poder visualizar a página. Você verá a seguinte página:
E o seu código é:
<html> <head> <title>Tutorial de ZPT</title> </head> <body> <h1>Meu Primeiro ZPT - zpt01</h1> </body> </html>
Passando valores para um ZPT
Vamos passar valores de um form para um ZPT.
Vamos criar um formulário. Este pode ser um simples arquivo html, porém se criado através de um zpt não tem problema.
Digite algumas informações:
<br> <form action="verdadosform.zpt" method="POST"> <p> Seu Nome: <br> <input type="text" size="20" name="nome"> <br> </p> <p> Sua Banda Preferida <br> <input type="text" size="15" name="banda"> <br> </p> <input type="submit" name="submit" value="Enviar"><br> </form>
Agora cria um Page Template (zpt) chamado verdadosform.zpt com o seguinte conteúdo:
Olá, <span tal:replace="request/nome">nome</span>. Eu sei que você gosta de <span tal:replace="request/banda">banda</span>. Boa Banda.
E se você tivesse colocado no campo nome "Fabio" e no campo banda "Metallica", teríamos a seguinte saída:
Olá, Fabio. Eu sei que você gosta de Metallica. Boa Banda.
Como vocês podem ver, é possível capturar o dado de um form através do campo request/nomedavariável.
Lendo o conteúdo de uma ZSQL Method
Para se ler o conteúdo de uma zsql é muito simples. Imaginemos que temos uma tabela com o nome protocolo, com os seguintes campos:
* Atendente
* Num_Protocolo
* Problema
* Solicitante
* Unidade
Então, vamos criar uma z sql method com o id = zsql_lista_protocolo, e vamos colocar o seguinte Query Template nele: select * from protocolo.
Pronto, já temos uma conexão com o banco de dados e para visualizarmos essas informações criaremos um page template com o nome zpt_lista_protocolo, com o seguinte código:
<table border="1" width="100%"> <tr> <th>Atendente</th> <th>Num Protocolo</th> <th>Problema</th> <th>Solicitante</th> <th>Unidade</th> </tr> <tr tal:repeat="item container/zsql_lista_protocolo"> <td tal:content="item/atendente">#</td> <td tal:content="item/num_protocolo">num_prot</td> <td tal:content="item/problema">Meta-Type</td> <td tal:content="item/solicitante">Title</td> <td tal:content="item/unidade">Title</td> </tr> </table>
Como podem perceber, é fácil indexar o campo de tabelas em um consulta dentro de um zsql method em um page template. A tag <tr tal:repeat="item container/zsql_lista_protocolo"> é a tag repeat que indica que vamos repetir valores dentro de uma lista ou consulta (no nosso caso a query zsql_lista_protocolo), e a tag <td tal:content="item/atendente">#</td> indica os campos da tabela que queremos visualizar. Podemos ir adicionando quantos campos fossem necessários dentro de nosso page template.
Conclusão
Estes foram pequenos exemplos de uso do ZPT.
É possível se realizar as mais diversas operações com o ZPT, mais isso fica para um tópico mais avançado.
Em breve escreverei outros artigos falando sobre o ZPT.
Até mais,
Fabio Rizzo Matos
www.fabiorizzo.tk
fabio@fabiorizzo.com
- PyODConverter - Conversão em batch de formato de documentosPython
- Plone: Quais templates e CSS controlam o que você vê e onde eles estão localizadosPython
- Web Services - criação, publicação e clientesWeb Services
- Introdução ao PyGamePython
- Automatização de tarefas do OpenOffice usando o PythonPython