MinimalContent pour Zope3
Par gawel le 22/04/2005 00:18
Ce tutoriel décrit comment créer un type de contenu minimal en ce basant sur les schémas de Zope3. Il n'est écrit que pour vous donner une première approche de la philosophie Zope3.
Catégories : Zope3
Stucture du package
Notre package auras la structure suivante
- minimalcontent/
- __init__.py
- interfaces.py
- classe.py
- browser.py
- minimalview.pt
- configure.zcml
__init__.py
Dans Z3 le __init__ est la pour la déco ;) En fait, juste pour faire de notre répertoire un package.
'''__init__ pour faire du dossier un package
'''
interfaces.py
Une classe qui représente le schéma de notre contenu (son interface)
from zope.interface import Interface
from zope.schema import Text, TextLine, Bool
class IMinimalContent(Interface):
u'''A minimal content'''
# un champ text
textline = TextLine(title=u'Text Line')
# un text area
text = Text(title=u'Text')
# un case a cocher
boolean = Bool(title=u'Boolean')
classe.py
L'objet en lui meme. La ou seront stockés les attributs
import persistent
from zope.interface import implements
from interfaces import IMinimalContent
# on veut que notre objet soit persistent
class MinimalContent(persistent.Persistent):
u'''A minimal content'''
# il implemente son interface (pour un contenu c'est suffisant)
implements(IMinimalContent)
# Un init des plus simple n'est ce pas ?
def __init__(self,title='',description='', text=''):
self.title = title
self.description = description
self.text = text
browser.py
C'est la vue du contenu
import zope.interface
from interfaces import IMinimalContent
# une class de vue pour le contenu avec un context et un request
class MinimalContentView:
# interface pour laquelle on utilise la vue
__used_for__ = IMinimalContent
def __init__(self, context, request):
self.context = context
self.request = request
minimalview.pt
Une template d'affichage. Si vous connaissez les zpt vous ne serez pas perdu.
<html metal:use-macro="context/@@standard_macros/page">
<body>
<div metal:fill-slot="body">
<div class="row">
<label>Text Line</label>
<div tal:content="context/textline">Text Line</div>
</div>
<div class="row">
<label>Text</label>
<div tal:content="context/text">Text</div>
</div>
<div class="row">
<label>Bool</label>
<div tal:content="context/boolean">True</div>
</div>
</div>
</body>
</html>
configure.zcml
C'est ici que l'on déclare nos classes, interfaces et vues ainsi que les permissions qui leurs sont associés
< configure
xmlns="http://namespaces.zope.org/zope"
xmlns:browser="http://namespaces.zope.org/browser"
xmlns:global_translation="http://namespaces.zope.org/gts"
>
< !-- description de la classe -->
< content class=".classe.MinimalContent">
< !-- ce quelle implemente -->
< implements interface=".interfaces.IMinimalContent" />
< implements
interface="zope.app.annotation.IAttributeAnnotatable"
/>
< !-- la permission zope.View est requise pour accéder au contenu -->
< require permission="zope.View"
interface=".interfaces.IMinimalContent" />
< !-- la permission zope.ManageContent est requise pour modifier le schema -->
< require permission="zope.ManageContent"
set_schema=".interfaces.IMinimalContent" />
< /content>
< !-- la vue du contenu
notez que le nom qui lui est associer n'est pas le même que le nom du fichier .pt
-->
< browser:page
for=".interfaces.IMinimalContent"
name="index.html"
template="minimalview.pt"
permission="zope.View"
class=".browser.MinimalContentView"
/>
< !-- le formulaire d'edit du schema -->
< browser:editform
schema=".interfaces.IMinimalContent"
label="Change Bookmark Information"
name="edit.html"
menu="zmi_views" title="Edit"
permission="zope.ManageContent"
/>
< !-- le formulaire d'ajout -->
< browser:addform
schema=".interfaces.IMinimalContent"
label="Add a minimal content"
content_factory=".classe.MinimalContent"
name="AddMinimalContent.html"
permission="zope.ManageContent"
/>
< !-- un menu pour pouvoir ajouter notre contenu -->
< browser:addMenuItem
class=".classe.MinimalContent"
title="Minimal Content"
description="A minimal content."
permission="zope.ManageContent"
view="AddMinimalContent.html"
/>
< /configure>
xmlns="http://namespaces.zope.org/zope"
xmlns:browser="http://namespaces.zope.org/browser"
xmlns:global_translation="http://namespaces.zope.org/gts"
>
< !-- description de la classe -->
< content class=".classe.MinimalContent">
< !-- ce quelle implemente -->
< implements interface=".interfaces.IMinimalContent" />
< implements
interface="zope.app.annotation.IAttributeAnnotatable"
/>
< !-- la permission zope.View est requise pour accéder au contenu -->
< require permission="zope.View"
interface=".interfaces.IMinimalContent" />
< !-- la permission zope.ManageContent est requise pour modifier le schema -->
< require permission="zope.ManageContent"
set_schema=".interfaces.IMinimalContent" />
< /content>
< !-- la vue du contenu
notez que le nom qui lui est associer n'est pas le même que le nom du fichier .pt
-->
< browser:page
for=".interfaces.IMinimalContent"
name="index.html"
template="minimalview.pt"
permission="zope.View"
class=".browser.MinimalContentView"
/>
< !-- le formulaire d'edit du schema -->
< browser:editform
schema=".interfaces.IMinimalContent"
label="Change Bookmark Information"
name="edit.html"
menu="zmi_views" title="Edit"
permission="zope.ManageContent"
/>
< !-- le formulaire d'ajout -->
< browser:addform
schema=".interfaces.IMinimalContent"
label="Add a minimal content"
content_factory=".classe.MinimalContent"
name="AddMinimalContent.html"
permission="zope.ManageContent"
/>
< !-- un menu pour pouvoir ajouter notre contenu -->
< browser:addMenuItem
class=".classe.MinimalContent"
title="Minimal Content"
description="A minimal content."
permission="zope.ManageContent"
view="AddMinimalContent.html"
/>
< /configure>
Note pour plus tard:
- Expliquer l'i18n
- Débuger la coloration syntaxique qui oblige à mettre un espace après les < dans un fichier xml. N'oubliez pas de les enlever !
Zcml :(
Posté par
Jah
le
25/04/2007 18:22
Pourriez-vous expliquer plus en details le fichier ZCML s'il vous plaît.
Mais ou peut on bien mettre tout cela??? ;-)
Posté par
lezardo
le
28/07/2007 16:45
Très clair tes explications, un grand merci pour ce tuto!
Par contre, j'ai juste une petite question, on construit tout cela dans la ZMI? Ou dans un éditeur de texte puis sauvé dans un répertoire spécifique? Quelle est alors la procédure pour que zope le reconnaisse?
D'avance un grand merci pour la réponse, je débute dans zope et c'est pas toujours facile facile... :-)
Simon
Par contre, j'ai juste une petite question, on construit tout cela dans la ZMI? Ou dans un éditeur de texte puis sauvé dans un répertoire spécifique? Quelle est alors la procédure pour que zope le reconnaisse?
D'avance un grand merci pour la réponse, je débute dans zope et c'est pas toujours facile facile... :-)
Simon








Je cherche un tutorial sur la création des produit sous zope3 ou zope2