Olá pessoal,
Nesse post vou ensinar um conceito muito importante para quem vai desenvolver para Plone, que é a criação de views.
A View é o lugar onde você pode implementar a lógica de negócio de sua aplicação, ela irá processar e renderizar o resultado em um template. Importante notar que nosso template não precisa ser necessariamente uma página HTML, o retorno pode ser no formato que você quiser como XML ou Json por exemplo.
Uma View é composta geralmente de uma classe Python e um template (ZPT) associado a ela. A ideia é que façamos a separação entre a lógica do negócio e a camada de apresentação, mantendo o template o mais simples possível.
Como criar uma View?
Uma view pode ser criada através de uma classe Python simples que implementa na inicialização um objeto de context e request, mas a maneira mais comum de fazer issso é herdando da classe BrowserView presente no pacote Products.Five que já vem junto com o Plone.
Antes de começar, certifique-se de que você tem um produto Plone para fazer as modificações, se você ainda não criou o seu veja como criar um produto Plone utilizando o mr.bob e instalá-lo via buildout.
Vamos ao que interessa!
Acesse o diretório “browser” do seu produto e crie um arquivo chamado views.py (o nome do arquivo pode ser qualquer um de sua escolha).
1 2 |
$ cd seu.produto/src/seu/produto/browser $ touch views.py |
Criar uma BrowserView é muito simples! Abra o arquivo views.py com seu editor de textos favorito e vamos criar nossa classe:
1 2 3 4 5 6 7 |
# -*- coding: utf-8 -*- from Products.Five.browser import BrowserView class MyFirstView(BrowserView): """My first BrowserView""" |
Vamos criar o template associado a nossa view. Ainda no diretório “browser”, crie o template:
1 |
$ touch myownview.pt |
Adicione um texto qualquer em nosso template para fins de teste:
1 |
$ echo "<h1>It's works</h1>" > myownview.pt |
Agora que já temos a classe e o template nós precisamos informar ao Plone que nossa view existe e darmos um nome a ela. Essa configuração é feita em arquivos ZCML (Zope Configuration Markup Language), um arquivo de configuração baseado em XML utilizado pelo Plone para registrar os mais diversos compontentes.
Dentro do diretório “browser” nós temos o arquivo “configure.zcml“. Vamos editá-lo!
Adicione as seguintes linhas ao final do arquivo, antes do fechamento da tag </configure>:
1 2 3 4 5 6 7 |
<browser:page for="*" name="my_first_view" permission="zope2.View" class=".views.MyFirstView" template="myownview.pt" /> |
Vamos explicar cada um desses elementos.
for: Especifica quais tipos de conteúdo podem receber essa View. O uso do “*” significa que podemos chamá-la em qualquer lugar do portal, mas você poderia especificar a interface de um tipo de conteúdo qualquer a sua escolha.
name: Esse é o nome que chamaremos nossa view. Para evitarmos conflito com algum conteúdo existente no portal é recomendável o uso de “@@” antes do nome da view ao chamá-la na URL. Ex.: http://localhost:8080/Plone/@@my_first_view
permission: A permissão de acesso à view que criamos. A permissão “zope2.View” indica que ela é pública, ou seja, qualquer usuário pode acessar, mas também há outras opções que podem ser usadas tais como: cmf.ModifyPortalContent ou cmf.ManagePortal. Você pode encontrar mais informações sobre as permissões padrões do zope na documentação oficial.
class: A classe que criamos para representar nossa View. Onde podemos implementar a lógica de negócio.
template: O template associado a nossa view.
Para fazer o Plone reconhecer nossa nova View precisamos reiniciar as instâncias de nossa instalação, após poderemos acessá-la de qualquer lugar do portal bastando acrescentar ao final da URL: “/@@my_first_view
O resultado ao chamar nossa view no navegador deverá ser a apresentação do texto: “It’s works”
Em resumo, para criar nossa própria BrowserView no Plone nós precisamos:
- Uma classe que herda de “BrowserView’;
- Um template;
- Registrar nossa View no arquivo de configuração “configure.zcml”
Legal! Já temos nossa View ativa e funcionando, agora vamos adicionar um comportamento qualquer para entendermos um pouco do que podemos fazer com Views 🙂
Em nosso arquivo views.py na classe MyFirstView vamos adicionar um método chamado ‘date’ para exibir a data atual no template.
1 2 3 4 5 6 7 8 9 |
from datetime import datetime from Products.Five.browser import BrowserView class MyFirstView(BrowserView): """My first BrowserView""" def date(self): return datetime.now().strftime('%d/%m/%Y') |
E no template associado vamos utilizar a TAL (Template Attribute Language) para exibir o resultado:
1 |
<p tal:content="view/date">datetime</p> |
O atributo tal:content substitui o conteúdo existente dentro do elemento html (nesse caso o <p>) pelo conteúdo informado. No exemplo nós estamos chamando o método ‘date’ de nossa view.
Espero que esse artigo seja útil para quem está começando com Plone e precisa deixar seus portais mais ricos e dinâmicos =)
Você pode ver o código completo feito nesse post no GitHub. =)
Abraços e até a próxima!
Sê o primeiro