Magazine Internet

Intro à Plone 3 : partie 3

Publié le 26 mars 2009 par Mikebrant

Troisième partie de l'intro à Plone 3 .

Mieux vaut tard que jamais.

Dans cette partie on va :

- configurer le fichier content/configure.zcml
- créer un profil
et puis je pense que ca suffira.

Une petite mise en bouche

Dans content/configure.zcml on va définir les permissions sur nos classes :

<configure
  xmlns="http://namespaces.zope.org/zope"
  xmlns:five="http://namespaces.zope.org/five"
  i18n_domain="jesuisunconnard.metier">
   
  <class class=".DossierHistoire.DossierHistoire">
  <require
  permission="zope2.View"
  interface="..interfaces.IDossierHistoire"
  />
  <require
  permission="cmf.ModifyPortalContent"
  set_schema="..interfaces.IDossierHistoire"
  />
  </class>
   
   
  <class class=".Histoire.Histoire">
  <require
  permission="zope2.View"
  interface="..interfaces.IHistoire"
 />
  <require
  permission="cmf.ModifyPortalContent"
  set_schema="..interfaces.IHistoire"
  />
  </class>
</configure>


Pas compliqué.
Tout le monde poura accéder aux méthodes&attributs de l'interface IDossierHistoire qu'implémente DossierHistoire, alors que pour les  éditer il faudra avoir un certain droit.
Et c'est pareil pour Histoire.

Voilà, voilà c'est terminé pour le dossier content.

Maintenant il faut l'inclure dans jesuisunconnard.metier , pour cela il suffit  de rajouter une ligne dans le configure.zcml principal (jesuisunconnard.metier/jesuisunconnard/metier/configure.zcml) ; ce qui donne :

<configure
  xmlns="http://namespaces.zope.org/zope"
  xmlns:five="http://namespaces.zope.org/five"
  i18n_domain="jesuisunconnard.metier">
  <include package=".content" />
  <five:registerPackage package="." />
</configure>


À  noter que dans la balise registerPackage, j ai enlevé  l'attribut initialize, vu qu'il nous sert à rien pour le moment.

Le plat de résistance

Souvenez-vous, dans la partie 2, on déclarait un type pour chacune de nos 2 classes.
Et je disais justement, qu'il faudrait les définir via des fichiers .xml, et bah ya plus qu'à!  
Je vous préviens va falloir résister à la tentation de dormir, sinon je ne vous délivrerai pas de votre ignorance. AMEN.

On va devoir créer nos fichiers .xml  dans un profil.
Or jesuisunconnard.metier n'en a pas, donc on en crée un.
Fichier jesuisunconnard.metier/jesuisunconnard/metier/configure.zcml :

<configure
   xmlns="http://namespaces.zope.org/zope"
   xmlns:five="http://namespaces.zope.org/five"
   i18n_domain="jesuisunconnard.metier">
   <genericsetup:registerProfile
      name="default"
      directory="profiles/default"
/>
</configure>


puis il faut créer les dossiers :

$ cd jesuisunconnard.metier/jesuisunconnard/metier/ & mkdir -p profiles/default

Je ne ré-explique pas  à quoi ca sert un profil, cf partie 1.
Voilà la base est faite.
Pour définir nos types/objets, il faut d'abord les enregistrer :
nouveau fichier profiles/default/types.xml :

<object name="portal_types" meta_type="Plone Types Tool">
   <object name="DossierHistoire"
meta_type="Factory-based Type Information with dynamic views"/>
   <object name="Histoire"
meta_type="Factory-based Type Information with dynamic views"/>
</object>


C'est la meme logique que pour le .xml de la partie 1 :
on sélectionne notre objet portal_types et on va y enregistrer nos 2 nouveaux types :
les objets DossierHistoire  et Histoire (ils doivent correspondre aux valeurs de portal_type dans la déclaration des classes)
meta_type : pas important pour ce tuto, mettez ça et mangez du saucisson.

À présent on va les définir ; pour ce faire, dans le dossier default on crée le dossier types .
Dedans, on va créer 2 fichiers .xml qui auront pour noms ceux de nos objets fraichement enregistrés :
soient DossierHistoire.xml et Histoire.xml .

Voici DossierHistoire.xml :

<?xml version="1.0"?>
<object name="DossierHistoire"
   meta_type="Factory-based Type Information with dynamic views"
   i18n:domain="jesuisunconnard.metier" xmlns:i18n="http://xml.zope.org/namespaces/i18n">
  
 <property name="title" i18n:translate="">DossierHistoire</property>
 <property name="description"
   i18n:translate="">Un dossier pour les histoires</property>
 <property name="content_meta_type">DossierHistoire</property>
 <property name="product">jesuisunconnard.metier</property>
 <property name="factory">addDossierHistoire</property>
 <property name="immediate_view">atct_edit</property>
 
 <property name="global_allow">True</property>
 <property name="filter_content_types">True</property>
 <property name="allowed_content_types">
   <element value="Histoire" />
 </property>
  <property name="allow_discussion">False</property>
 <property name="default_view">derniers</property>
 <property name="view_methods">
  <element value="derniers"/>
  <element value="aleatoire"/>
  <element value="view"/>
  <element value="folder_summary_view"/>
  <element value="folder_tabular_view"/>
  <element value="folder_listing"/>
 </property>
 
 <alias from="(Default)" to="(dynamic view)"/>
 <alias from="edit" to="atct_edit"/>
 <alias from="sharing" to="@@sharing"/>
 <alias from="view" to="(selected layout)"/>
 <action title="View" action_id="view" category="object" condition_expr=""
   url_expr="string:${folder_url}/" visible="True">
  <permission value="View"/>
 </action>
 <action title="Edit" action_id="edit" category="object" condition_expr=""
   url_expr="string:${object_url}/edit" visible="True">
  <permission value="Modify portal content"/>
 </action>
</object>


Bon allez c'est la ligne droite : si vous ne vous plantez pas comme senna après ça c'est la fin de la partie.

ligne 2 : le nom de notre objet : le même que celui écrit dans types.xml .
ligne 3 : le même que celui écrit dans types.xml.
ligne 6 : le titre de notre objet : on met le nom de l'objet .
ligne 7/8 : une description pour notre objet.
ligne 10 : ici on met le nom de notre objet.
ligne 11 : le produit auquel appartient l'objet : notre egg.
ligne 12 :  on définit un factory qui doit être de la forme : addMonType.
Il sera créé par Archetypes (cf une future partie).
Il va être chargé entre autre (pas sûr de l'orthographe) de créer l'objet.
ligne 14 : absolument inutile pour le moment.
Est censé nous rediriger sur la vue (en l'occurence atct_edit, créée automatiquement par Archetypes) une fois l'objet créé, mais ne fonctionne pas pour le moment.
ligne 16 : à True, permet d'ajouter notre objet depuis n'importe quel autre objet.
ligne 17
:  Va avec les lignes 18, 19 et 20 . à True, permet de filtrer les objets que l'on peut ajouter dedans.
ligne 18 : Comme on a mis à True la propriété précédente, on doit indiquer les objets que l'on peut ajouter dans notre objet à l'intérieur de cette balise ;
ligne 19 :  ceci ce fait via <element value="MonType" /> : ici, on autorise seulement les histoires à être ajoutées dans notre DossierHistoire ( normal hein).
ligne 20 : on ferme la balise.
ligne 21 : Si on autorise les commentaires sur notre objet , bien sûr que non ! donc False. Manquerait plus que ça ...
ligne 22 : la vue par défaut de notre objet cad qu'accéder à  www.jesuisunconnard.com/monObjet/ revient à www.jesuisunconnard.com/monObjet/maVueParDefaut . Ici la vue par défaut est derniers que l'on verra dans une autre partie.
ligne 23/30 : heureusement que c'est la fin, je commence à manquer de couleurs.
Liste les différentes vues d'affichage disponibles pour notre objet (que l'on verra via "affichage"), la vue aleatoire sera créée également plus tard, les autres existent déjà.
ligne 32 : "surchage" la ligne 22. Accéder à www.jesuisunconnard.com/monObjet/ reviendra à www.jesuisunconnard.com/monObjet/maVueAffichageParDefautEnCours
ligne 33 :  action "editer" notre objet : nous redirigera sur la vue atct_edit.
ligne 34 :  action "partager" notre objet: nous redirigera sur la vue @@sharing.
ligne 35 :  action "voir" notre objet : nous redirigera sur la vue d'affichage actuelle de notre objet.
ligne 36/37/38 : Appuyer sur le bouton "voir" est associé à l'action "voir"(ligne 34 ) , le lien sera de la forme : www.jesuisunconnard.com/monObjet/ et sera accessible par tous.
igne 39 : on la ferme
ligne 40/41/42 : Appuyer sur le bouton "Edit" est associé à l'action "edit"(ligne 33 ), le lien sera de la forme www.jesuisunconnard.com/monObjet/edit et sera accessible uniquement par les admins.
ligne 43 : on la ferme
ligne 44 : fini !

Voilà,je suis conscient que les explications doivent être assez pourries pour ces 44 lignes mais j'aime le chocolat.
je ne ré-explique pas le fichier Histoire.xml que voici :

<?xml version="1.0"?>
<object name="Histoire"
   meta_type="Factory-based Type Information with dynamic views"
   i18n:domain="jesuisunconnard.metier" xmlns:i18n="http://xml.zope.org/namespaces/i18n">
 <property name="title" i18n:translate="">Histoire</property>
 <property name="description"
   i18n:translate="">Detail Histoire</property>
 <property name="content_meta_type">Histoire</property>
 <property name="product">jesuisunconnard.metier</property>
 <property name="factory">addHistoire</property>
 <property name="immediate_view">atct_edit</property>
 <property name="global_allow">False</property>
 <property name="filter_content_types">False</property>
 <property name="allowed_content_types" />
 <property name="allow_discussion">True</property>
 <property name="default_view">details</property>
 <property name="view_methods">
  <element value="details"/>
 </property>
 <alias from="(Default)" to="(dynamic view)"/>
 <alias from="edit" to="atct_edit"/>
 <alias from="sharing" to="@@sharing"/>
 <alias from="view" to="(selected layout)"/>
 <action title="View" action_id="view" category="object" condition_expr=""
   url_expr="string:${object_url}" visible="True">
  <permission value="View"/>
 </action>
 <action title="Edit" action_id="edit" category="object" condition_expr=""
   url_expr="string:${object_url}/edit" visible="True">
  <permission value="Modify portal content"/>
 </action>
</object>


Puisqu'il y a exactement les mêmes balises.
Si vous remaquez une des erreurs, n'hésitez-pas,
pour les questions pareil ( d'ailleurs mon mail david [arrobase] qui-saura [point] fr ne marche toujours pas [je dois compiler postfix à "la main" pour avoir les modules sasl&co] donc désolé pour ceux à qui je ne peux plus répondre, utiliez le mail de la page "A propos" ).


Retour à La Une de Logo Paperblog

A propos de l’auteur


Mikebrant 9 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte