Vamos criar agora um formulário de pesquisa a base de dados
criada utilizando ZPT (Zope Pages Templates) e o engine do Plone.
Acesse o ZMI e clique em Page Templates:
Ao clicar em add, teremos uma tela onde temos informações sobre
o novo arquivo:
O campo File contém um espaço onde podemos importar um arquivo
simples em HTML ou XML para servir como base para criarmos os
nossos ZPT´s. Clique em Add and Edit.
Você vai ver o seguinte conteúdo:
Vamos alterar o texto do Page Template para o seguinte:
<html>
<head>
<title tal:content="template/title">The title</title>
</head>
<body>
<FORM action="." method=get>
<P>Digite o Nome da Pessoa que você quer saber o ramal.</P>
<TABLE> <TBODY>
<TR>
<TH>Nome</TH>
<TD><INPUT name=Usuario width="30"></TD>
</TR>
<TR>
<TH></TH>
<TD><INPUT type=submit value="Pesquisar Ramal" name=template:method></TD>
</TR>
</TBODY></TABLE></FORM>
</body>
</html>
Salve o Template e clique em Test. Assim poderá visualizar o que
você fez. Veja a saída desse código:
Como visto, este código não contém muita nada de especial, somente html e uma parte do ZPT, que é a seguinte:
<title tal:content="template/title">The title</title>
E essa parte faz o trabalho de pegar na propriedade do template
o title e exibir o seu valor no lugar onde está o The title.
Porém como visto acima, a página não está dentro do layout do
Plone (skin). Para que a page template fique dentro do skin basta
modificar algumas linhas no código (as mudanças estão em negrito
destacado):
<html metal:use-macro="here/main_template/macros/master">
<head>
<title tal:content="template/title">The title</title>
</head>
<body><div metal:fill-slot="main">
<FORM action="." method=get>
<P>Digite o Nome da Pessoa que você quer saber o ramal.</P>
<TABLE> <TBODY>
<TR>
<TH>Nome</TH>
<TD><INPUT name=Usuario width="30"></TD>
</TR>
<TR>
<TH></TH>
<TD><INPUT type=submit value="Pesquisar Ramal" name=template:method></TD>
</TR>
</TBODY></TABLE></FORM>
</div></body>
</html>
Salve o arquivo, clique em Test e veja o resultado:
Pronto, agora estamos dentro do layout do Plone.
Agora vamos criar uma Z SQL Method para a busca das
informações. Veja:
Clique em Add e vamos configurar:
Clique em ADD. Agora temos um formulário para consultar
e criamos uma query do SQL. Agora vamos criar um formulário
para visualizar os dados de nossa consulta. Agora adicione
um Z Search Interface:
Ao clicar teremos uma janela com as configurações do Objeto:
Iremos selecionar a nossa Z SQL Method que criamos, a
zsql_select, colocaremos o nome page template de template,
pois esse foi o nome que definimos no form de pesquisa. O
campo Search Input Id deverá ser o mesmo do seu Campo no
formulário de pesquisa e o de seu campo Arguments do seu
zsql_select. Ao clicar em ADD você terá alguns:
Como você pode perceber, temos o template que criamos e um outro objeto, o Usuario. Ao abrir o arquivo podemos ver que ele se trata de um form de pesquisa, semelhante ao formulario_pesquisa que criamos anteriormente. Veja:
Porém, este é um formulário que não está "lapidado" conforme
nossas necessidades. Podemos então ignorá-lo ou simplesmente
deletá-lo.
Agora precisamos customizar o template, para que ele mostre
os resultados usando o skin do Plone.
Veja o código:
<html metal:use-macro="here/main_template/macros/master">
<body><div metal:fill-slot="main" tal:define="results here/zsql_select;
start request/start|python:0;
batch python:modules['ZTUtils'].Batch(results,
size=20,
start=start);
previous python:batch.previous;
next python:batch.next">
<p>
<a tal:condition="previous"
tal:attributes="href string:${request/URL0}?start:int=${previous/first}"
href="previous_url">previous <span tal:replace="previous/length">20</span>
results</a>
<a tal:condition="next"
tal:attributes="href string:${request/URL0}?start:int=${next/first}"
href="next_url">next <span tal:replace="next/length">20</span> results</a>
</p>
<table border>
<tr>
<th>Cod</th>
<th>Usuario</th>
<th>Unidade</th>
<th>Ramal</th>
<th>Radio</th>
<th>Celular</th>
<th>Email</th>
</tr>
<div tal:repeat="result batch" >
<tr>
<td><span tal:replace="result/cod">cod goes here</span></td>
<td><span tal:replace="result/usuario">usuario goes here</span></td>
<td><span tal:replace="result/unidade">unidade goes here</span></td>
<td><span tal:replace="result/ramal">ramal goes here</span></td>
<td><span tal:replace="result/radio">radio goes here</span></td>
<td><span tal:replace="result/celular">celular goes here</span></td>
<td><span tal:replace="result/email">email goes here</span></td>
</tr>
</div>
</table>
<p>
<a tal:condition="previous"
tal:attributes="href string:${request/URL0}?start:int=${previous/first}"
href="previous_url">previous <span tal:replace="previous/length">20</span>
results</a>
<a tal:condition="next"
tal:attributes="href string:${request/URL0}?start:int=${next/first}"
href="next_url">next <span tal:replace="next/length">20</span> results</a>
</p>
</div></body>
</html>
Neste código nós implementamos a skin do Plone e as nossas
queries vão aparecer dentro do Plone. Com este arquivo,
finalizamos a criação de um formulário de pesquisa de dados.