2.
Criar Uma View Customizada
Um nível acima
Nota: O autor deste documento não é um expert apenas alguém que está a
iniciar a sua aprendizagem de Python/Zope/Plone/Archetypes portanto é
possível que existam alguns erros nesta explicação ou coisas que não
são estritamente necessárias.
Este documento baseia-se num tipo chamado Quote, criado pelo autor através da utilização do Archetypes.
O primeiro passo consiste em criar uma directoria chamada skins dentro
da directoria Quote (esta directoria é a que irá ser colocada na
directoria Products). Dentro desta (skins) outra directoria chamada
Quote deverá ser adicionada e dentro desta irão ser guardados os
templates.
O template QuoteView.pt foi criado na directoria Quote/skins/Quote com o seguinte código::
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
lang="en"
metal:use-macro="here/main_template/macros/master">
<body>
<div metal:fill-slot="main">
<div metal:define-macro="main" tal:omit-tag="">
<h1 tal:content="here/title_or_id" />
<p tal:content="here/getQuote"/>
<p tal:content="here/getAuthor"/>
</div>
</div>
</body>
</html>
Caso esteja interessado num exemplo mais completo, veja:
http://cvs.sf.net/viewcvs.py/archetypes/ArchExample/skins/archexample/article_view.pt?view=markup
Na directoria Quote/ existe um script chamado config.py onde certas
constantes se encontram definidas. Nesse ficheiro foram adicionadas as
seguintes constantes::
SKINS_DIR = 'skins'
GLOBALS = globals()
Cada vez que necessitar de usar estas constantes é necessário
importá-las antes. Tal pode ser consguido através da utilização da
seguinte linha::
from Products.Quote.config import SKINS_DIR, GLOBALS
onde Quote deverá ser substituido pelo nome do produto desenvolvido pelo leitor.
Caso esteja tentado a mudar o nome da directoria skins o autor
desaconselha-o pois ele tentou e não funcionou (pelo menos com o código
dele).
Agora é necessário instalar os componentes apropriados. No
Quote/Extensions/Install.py (script de instalação do produto)
adiciona-se, na função install, uma chamada a install_subskin() como
exemplificado em seguida (ficheiro Install.py na sua totalidade)::
from Products.Quote.config import PROJECTNAME, GLOBALS
from Products.Archetypes.public import listTypes
from Products.Archetypes.Extensions.utils import installTypes, install_subskin
from StringIO import StringIO
def install(self):
out = StringIO()
installTypes(self, out, listTypes(PROJECTNAME), PROJECTNAME)
install_subskin(self, out, GLOBALS)
print >> out, "Successfully installed %s." % PROJECTNAME
return out.getvalue()
No ficheiro __init__.py adicione esta linha::
registerDirectory(SKINS_DIR, GLOBALS)
e tenha a certeza que está a importar as constantes SKINS_DIR e GLOBALS.
A última coisa a ser adicionada é a classe principal do produto, neste caso, Quote (acções definidas no Quote.py)::
class Quote(BaseContent)
[...]
actions = ({'id': 'view',
'name': 'View',
'action': 'string:${object_url}/QuoteView',
'permissions': (CMFCorePermissions.View,)},)
E caso não exista nenhum erro, nem da parte do autor nem da parte do
leitor, neste momento a view deverá encontrar-se customizada.
Espero que isto o tenha ajudado.