FLASH INFORMATIQUE FI



Plone, plate-forme Open Source de développement de sites communautaires




Francis LAPIQUE


Introduction

Si ces derniers temps nous avons connu un séisme de force 5, celui qui se prépare dans le domaine des systèmes de gestion de contenu (ou CMS) Open Source s’annonce tout aussi fort. Pour preuve :

• les publications du Domaine IT qui sont sous SPIP (Système de Publication Pour Internet) ;
• nos quelques 160 sites éditoriaux actuellement sous Jahia v.3 vont progressivement passer sous Jahia v.4 qui va apporter la gestion multilingue et un circuit de validation ou workflow des contenus éditoriaux ;
• le site actualites exploité par le Service de presse & information utilise php-Nuke ;
• et un nouveau candidat pour les sites communautaires et bases de connaissances qui fait beaucoup parler de lui, Zope/CMF, ou plus exactement Python/Zope/CMF/Plone qui fait l’objet de cet article.
Pour les lecteurs qui désireraient très rapidement avoir une idée du produit PLONE, je les encourage à visualiser les vidéos disponibles sur le site www.plone.fr.

Schéma de principe


JPEG - 12.2 ko

Une première remarque, le choix de l’Open Source pour l’ensemble des concepts et outils visant à résoudre les problèmes de production de contenu des sites Web reste toujours le bon. La diversité et la richesse des frameworks Open Source écrits en Java/PHP/Python est la seule approche qui couvre l’ensemble des fonctionnalités essentielles d’un système de gestion de contenu qui sont :

• la gestion des utilisateurs et de leurs droits ;
• la création et l’édition de contenu ;
• le stockage du contenu ;
• les métadonnées (ensemble de propriétés décrivant le contenu) ;
• la gestion de la qualité de l’information (workflow) ;
• l’indexation et la recherche ;
• la gestion de l’interface utilisateur ;
• la syndication (regroupement d’informations provenant de différentes sources).
Une deuxième, pour compléter la première. Tous ces outils ou solutions sont-ils en concurrence directe ? Oui et non. Oui, car tous font de la gestion et production de contenu. Non, si vous prenez Jahia, c’est un CMS qui cible des portails d’information et non celui de communautés en ligne. Zope c’est l’inverse. Au milieu, je vous l’accorde c’est assez confus.
Une troisième, il est impossible dans le cadre d’un article de couvrir tous les aspects d’un framework tel que Python/Zope/CMF, nous irons à l’essentiel avec tout ce que cette démarche sous-entend comme frustration pour le lecteur comme pour l’auteur.

La gestion de contenu avec ZOPE et le CMF

Architecture technique vue d’avion

Commençons par le commencement. Qu’est-ce que Zope ? En une seule phrase, comme l’indiquent O. Deckmyn et P-J. Grizel dans leur livre Zope (2e édition) : Zope est un environnement de publications d’objets sur le Web. Zope à l’image du langage de programmation Python sur lequel il est bâti à 90% est orienté objet. Insistons, avec Zope, on ne publie pas des pages Web mais des objets pouvant être assemblés automatiquement à partir de composants dont le comportement, les données et l’apparence sont configurables par le concepteur du site. La persistance de ces objets est assurée par une base objet, la ZODB (Zope Object Data Base). L’ensemble est stocké dans un fichier data.fs. Ce fichier contient non seulement les versions des objets utilisés, mais un historique des modifications apportées, ce qui permet de revenir à un état précédent. La base ZODB est transactionnelle, ce qui signifie que tout traitement entamé est soit terminé avec succès soit annulé. Chaque objet possède un contexte qui lui est propre. Les objets Zope les plus courants appartiennent aux classes Folder, Document et Method. Ils sont à prendre dans le cadre de la programmation objet. Un objet est défini par :
• son état (l’ensemble des valeurs de ses attributs) ;
• son comportement (l’ensemble des méthodes qui lui sont applicables).
La plupart des objets Zope possèdent une méthode qui permet leur représentation en HTML. Pour un Folder, cette méthode affiche un document particulier à l’intérieur du Folder. La publication de ces objets est gérée par un composant de Zope nommé Zpublisher.
La fig. 1 montre l’architecture de la plate-forme Zope.

JPEG - 9.9 ko
figure 1
architecture plate-forme Zope

Les requêtes HTTP parviennent à Zserver (un composant qui comme son nom l’indique joue le rôle de serveur Web ; Zope peut aussi être placé derrière un serveur classique Apache). Elles sont transformées en requêtes interprétables par Zpublisher. Comment invoquer des méthodes d’objets sur le serveur Zope ?
Avec Apache, l’URL localhost/web/test/mapage.html revient à accèder au fichier mapage.html situé dans le répertoire DocumentRoot/web/test/ de la machine localhost.

Sous Zope : localhost:8080/web/test/mapage.html signifie publier l’objet mapage.html contenu dans l’objet test contenu dans l’objet web contenu dans la racine de la base ZODB.

Site collaboratif sous ZOPE/CMF


JPEG - 10.3 ko
Figure 2

Un site collaboratif est un site sur lequel des internautes fournissent le contenu et le mettent en valeur pour d’autres à travers 4 grandes étapes :

• Identification : un membre s’identifie et accède à un espace privé au sein du site.
• Composition : le membre-rédacteur rédige un article, une brève. Ce document restera privé tant que son auteur ne déclarera pas explicitement qu’il veut le partager avec la communauté.
• Modération et validation : le rédacteur décide de publier son contenu. Suivant le type de données et les règles en vigueur sur le site, l’information est soit directement mise en ligne, soit sujette à l’approbation d’un modérateur ou relecteur.
• Publication : le contenu publié est classé et indexé en fonction de son type, du workflow associé et de ses métadonnées.
Fig. 2

Le CMF (Content Management Framework) offre un ensemble de services de base pour la gestion de contenu comme la gestion :
• d’un espace personnel : le contenu n’est pas situé à l’endroit où il est affiché ;
• du processus de création de contenu par les membres : dans son espace privé le membre ajoute du contenu en selectionnant le type de contenu ;
• du workflow de publications : le concepteur du site peut déterminer tous les états possibles, les transitions, les acteurs ;
• de l’indexation et du moteur de recherche : tous les contenus créés sont indexés dans un moteur de recherche intégré à Zope ;
• de l’interface utilisateur : séparation du contenu, de la logique et de la présentation sur un concept de Skins ;
• des métadonnées : on peut associer à tous les contenus du site un ensemble de métadonnées définies par le standard Dublin Core (titre, description, sujet,...) ;
• des versions : chaque rédacteur peut revenir à une version précédente de son contenu ;
• de la syndication : le CMF permet d’exposer n’importe quel contenu de votre site sous forme RSS XML.

Et Plone dans tout cela ? C’est l’outil de gestion de contenu (CMS) construit au dessus du CMF. C’est la simplicité d’utilisation et la robustesse de Plone qui ont permis à Zope d’avoir le succès qu’il a actuellement. Le nombre de sites Plone dans le monde ne cesse de croître.

Installation et configuration

PYTHON/ZOPE

L’installation de Zope est très simple et ne doit prendre que quelques minutes (ça fait rêver quand une suite de produits équivalents d’un grand éditeur va vous prendre au bas mot 8 à 10 jours et sans garantie de résultat !). A l’heure actuelle la version 2.7 est officiellement sortie, vous pouvez télécharger sa version binaire pour Windows (.exe), Linux (.rpm ou .tar.gz) et Mac OS X à l’adresse : www.zope.org/Products/Zope. Démarrez Zope et vérifiez son bon fonctionnement en vous connectant à l’url : localhost:8080 ou dans son environnement de développement localhost:8080/manage. Vous trouverez sur le site Zope The Zope Book (2.6 Edition) qui fait environ 500 pages en format PDF. Vous pouvez également vous procurer en librairie le livre Zope 2ème édition déjà cité, très bon ouvrage qui couvre l’essentiel de Zope, du langage Python et donne des exemples de mise en oeuvre trés didactiques.

CMF

CMF est une extension de Zope livrée sous forme de Produits. Pour l’heure vous trouverez une archive de sa version 1.4.2 à l’adresse : cmf.zope.org/download. Cette archive comprend les sous-répertoires : CMFCore, CMFDefault CMFTopic, CMFCalendar et DCWorkflow. Copiez tous ces répertoires sous celui de Zope : la_où_vous avez_zope/lib/python/Products/. Redémarrez Zope et vérifiez au moyen du menu Control_Panel->Product Management de l’interface de management de Zope (localhost:8080/manage ou ZMI) la présence de l’infrastructure CMF.
Quelques mots sur ces composants CMF :

• CMFCore fournit l’infrastructure de base du framework
• CMFDefault fournit une implémentation d’un site de type portail simple
• CMFTopic permet de gérer des objets de type Topic qui encapsulent des requêtes prédéfinies par l’utilisateur vers le moteur d’indexation
• CMFCalendar permet de gérer des objets de type Event et de les afficher au sein du portail via un calendrier
• DCWorkflow comme son nom l’indique est une solution de mise en oeuvre de workflow pour les applications CMF.

PLONE

Dernière étape : l’installation de Plone. Téléchargez le produit dans sa version 2.0 à l’adresse : plone.org/downloads/.
Le produit Plone, couche au-dessus de CMF, fournit un applicatif utilisable [Out of the Box] par l’utilisateur final. Attention pour une utilisation du support des langues vous avez besoin des produits : i18n, Localizer et TranslationService. Si vous rencontrez des problèmes avec l’internationalisation de Plone, n’installez pas le produit TranslationService. Redémarrez Zope pour vérifier que tout se passe bien.

Présentation des composants et service d’un site PLONE

La gestion d’un site Plone a deux aspects :
• technique à travers l’interface localhost:8080/monsite/managemonsite est l’id (voir plus bas) du site
• gestion de contenu avec comme interface localhost:8080/monsite

Créer un site : PLONE

Rien de plus simple, lancez l’interface de management Zope, allez dans le menu déroulant à droite, choisissez Plone Site. Vous obtenez un formulaire.

JPEG - 13 ko
figure 3

Ce formulaire vous invite à donner l’identifiant de l’objet, pour nous ce sera monsite, le titre donné au site, l’endroit de stockage de la base des utilisateurs du site (dans l’arborescence de notre site ou dans le dossier acl_users à la racine du site Zope) et une description sommaire.
Cliquez le bouton Add et vous êtes automatiquement dirigé sur la page d’accueil. Le site est prêt à l’emploi. Pour un paramétrage avancé cliquez le lien plone setup.

JPEG - 12.3 ko
figure 4

Vue technique : services du site


JPEG - 17.2 ko
Figure 5

En ouvrant notre site en mode manage sous un compte administrateur vous pouvez voir le contenu de l’objet représentant le site Plone. Vous y trouverez des composants d’aide à la mise en oeuvre du site :

• MailHost pour envoyer des e-mails ;
• le dossier Members. Chaque membre va se voir attribuer un dossier, plus exactement un conteneur de type Portal Folder ou Plone Folder qui lui sera propre ;
• acl_users objet User Folder contenant les utilisateurs déclarés avec leur rôle ;
• l’objet content_type_registery, définition de la correspondance entre les types MIME et les types de contenu ;
• l’objet cookie_authentication pour configurer les paramètres d’authentification dans le navigateur de l’utilisateur ;
et des composants d’infrastructure de services :

• portal_catalog pour l’emploi du moteur d’indexation
• portal_actions présente les actions disponibles pour un utilisateur sur un document ou un dossier donné
• portal_discussion permet de configurer la possibilité de discuter chaque document du portail (mini-forums)
• portal_membership pour gérer le mécanisme d’authentification des membres
• portal_memberdata permet de définir les propriétés que l’on souhaite conserver pour chaque utilisateur
• portal_metadata fournit l’interface de gestion des métadonnées
• portal_properties pour y définir des fiches de propriétés
• portal_skins fournit les services de l’interface graphique du site. Un/une skin est un ensemble de mises en page graphiques pour respecter la sacro-sainte séparation contenu/design/logique que TOUT gestionnaire de contenu se doit de respecter.
• portal_types, vous définissez pour chaque type de contenu, les actions par lesquelles l’utilisateur interagit avec le contenu en fonction de ses droits.
• portal_workflow aide à définir le cycle de vie du contenu
• portal_syndication gère la syndication du contenu à travers le site
• portal_undo permet l’annulation des actions effectuées sur le contenu
• portal_form permet de gérer les formulaires d’édition associés à vos types de contenu.
• portal__calendar permet la gestion de contenu de type Event, et l’accès au contenu du site sur des critères de date

Vue utilisateur


JPEG - 13 ko
Figure 6

Sur la figure précédente, on distingue 4 parties :

1.  l’en-tête
2.  les côtés
3.  la partie centrale
4.  le pied de page

L’en-tête contient un logo, un petit formulaire de recherche, et des onglets de navigation. Les côtés contiennent plusieurs boîtes à outils. A gauche, une boîte de navigation représente une arborescence comme dans un explorateur Windows. A droite, la boîte des publications récentes et un calendrier qui indique les événements du mois en cours et la date du jour encadrée d’un petit rectangle rouge. Dans la partie centrale, le contenu du document que vous visualisez. En haut à droite quelques actions rapides : envoyer le lien par e-mail, imprimer la page, ajouter aux favoris.
Pour ajouter du contenu, cliquez my folder dans la barre d’outils à côté d’admin. Une liste déroulante propose tous les types de contenus que vous avez le droit de rajouter.

JPEG - 13.8 ko
Figure 7

Pour publier cliquez l’onglet state et choisir publish. Suivant la règle du site, l’article est publié directement ou soumis au modérateur. La date d’activation permet de choisir la date à partir de laquelle l’article sera visible des autres utilisateurs. La date d’expiration permet quant à elle de retirer un article à partir d’une certaine date. Il est possible d’autoriser d’autres personnes à travailler sur vos documents en cliquant sur l’onglet sharing. Pour ce faire, ajoutez un membre existant et attribuez lui un rôle pour le document. Pour modifier il faut vérifier que son état est autre que publish. Vous pouvez modifier l’ordre d’apparition de vos articles.

Personnalisation

Vous avez deux types de personnalisation, une personnalisation graphique (l’apparence du site) et une autre fonctionnelle. Dans le cadre de cet article nous ne pouvons qu’en décrire les grandes lignes.

Personnalisation graphique

L’architecture du CMF met en oeuvre un mécanisme de Zope nommé skins qui permet de modifier l’apparence du site en choisissant une méthode de présentation. Une skin est composée de méthodes DTML ou ZPT et de scripts Python. Le DTML est un langage à balises pour modèle de document qui est en train de s’effacer au profit de ZPT ou Zope Page Template. Le grand enjeu de ZPT est de proposer une approche pour améliorer la collaboration entre les différents intervenants techniques du projet et plus particulièrement les graphistes et les développeurs. Le principe général de ZPT repose sur une astuce simple : les règles de transformation sont portées par les attributs des balises HTML. Exemple : Si la maquette graphique dispose de la phrase suivante :

Le titre du chapitre

l’intégration dans une page template se fera en écrivant :

Le titre du chapitre

En dehors de Zope, le navigateur affiche la chaîne "Le titre du chapitre" ; dans Zope, title_or_id renvoie le titre du document s’il en possède ou son identifiant dans le cas contraire et le substitue au titre statique. L’expression tal:content="here/title_or_id" est un attribut de TAL (Template Attribute Language) qui complète HTML en fournissant des attributs permettant d’effectuer des actions dynamiques. La variable here correspond au contexte de la page en cours.
Voici un exemple plus complet pour afficher les attributs des objets contenus dans un dossier :

 MonObjet 
Id Titre Dernière modification
MonObjet à moi 27/02/2004

Un exemple pratique

Comment modifier le haut de page comprenant le logo ? Cette opération est très simple :
1.  vous êtes dans la ZMI (localhost:8080/monsite/manage) suivez le chemin portal_skin->plone_images ;
2.  cherchez et sélectionnez dans la liste logo.jpg ;
3.  cliquez Customize pour créer une version personnalisée de cette image ;
4.  cliquez le bouton Browse pour aller chercher votre image puis Upload.
Vous avez créé dans le dossier custom un nouvel objet logo.jpg qui est en tête de liste. Vous pouvez faire des choses plus complexes en modifiant le contenu du répertoire portal_skins->plone_styles qui contient toutes les feuilles de styles ou portal_skins->plone_templates pour les templates (header, footer,...).

Personnalisation fonctionnelle

Passons aussi brièvement sur la personnalisation fonctionnelle. C’est à dire la personnalisation du comportement du CMF et de la manière dont sont stockées et gérées les données qui forment le contenu du site. Vous pouvez personnaliser le workflow en cliquant sur l’outil portal_workflow comme les types de contenu simple tels que Document, News Item, Image, File, Link, Favorite. Nous laisserons de côté, dans le cadre de cet article, le workflow.
Le composant portal_type vous offre plusieurs solutions pour définir vos propres types de contenu. De la plus simple à la plus complexe

1.  personnaliser directement un type défaut ;

2.  recopier un type défaut et s’en servir de base ;

3.  définir un type à partir d’une extension de type Zclass (une Zclass est un produit Zope qu’il est possible de créer de rien ou d’étendre d’une classe existante par héritage) ;

4.  définir un type à partir d’une extension de type Produit Python.

Pour modifier, par exemple le News Item, sélectionnez sous portal_types l’objet News Item (Actualites). La figure suivante vous donne une image de cette interface. Si vous voulez ouvrir cet objet à la discussion, cochez la case Allow Discussion ? Cliquez ensuite sur l’onglet Actions pour découvrir les actions associées au type. L’action View est associée à l’action newsitem_view et State au programme python object and portal.portal_workflow.getTransitionsFor(object, object.getParentNode()). Terminer la personnalisation en vous reportant au template de visualisation ou d’édition.

JPEG - 19 ko
Figure 8

Mise en production et montée en charge

Zope est un serveur d’applications disposant d’un serveur HTTP interne, mais comme toujours il est vivement conseillé de lui adjoindre un serveur HTTP pour laisser Zope jouer simplement son rôle de serveur d’applications. Dans le cas d’Apache comme serveur Web frontal, modifier le fichier httpd.conf pour faire intervenir les mod_proxy et rewrite. Utiliser les gestionnaires de cache de Zope : RAM Cache manager pour l’organisation du CPU et HTTP Accelerated Cache Manager pour l’optimisation de la bande passante. Pour les très gros sites (montée en charge) et pour les sites critiques vous pouvez aller vers des solutions clusters. Il faut jeter un coup d’oeil sur ZEO (Zope Entreprise Object) qui permet de construire des clusters de serveurs Zope.

Conclusion

Développé par la société Digital Creations, ZOPE est commercialisé jusqu’en novembre 1998, date à laquelle cette société décide de placer son application en open source. Et depuis, la diffusion de Zope ne fait qu’augmenter, en partie grâce au succès remporté par Plone. L’énorme force de Zope c’est le langage Python, orienté objet très facile d’approche et la pléthore de composants prêts à l’emploi (authentifier les utilisateurs avec LDAP, gérer un caddy de e-commerce, mettre en ligne un sondage,...). Pour la suite prendre contact avec le signataire de l’article pour aller plus loin,...

Références

1.  www.zope.org/
2.  www.zope.org/Products/
3.  cmf.zope.org/
4.  www.plone.org/
5.  www.python.org/
6.  www.zopezen.org/

Communautés en Europe

1.  Allemagne : www.zope.de
2.  Zope en France : www.zopera.org
3.  Plone en France : www.plonefr.org

Livres

1.  Learning Python, Second Edition by David Ascher (Author), Mark Lutz (Author)
2.  Python Cookbook by Alex Martelli (Editor), David Ascher (Editor)
3.  Zope, Olivier Deckmyn, Pierre-Julien Grizel
4.  Les Cahiers du programmeur Zope : Premier site collaboratif avec Zope/CM - Kamon Ayeva



Cherchez ...

- dans tous les Flash informatique
(entre 1986 et 2001: seulement sur les titres et auteurs)
- par mot-clé

Avertissement

Cette page est un article d'une publication de l'EPFL.
Le contenu et certains liens ne sont peut-être plus d'actualité.

Responsabilité

Les articles n'engagent que leurs auteurs, sauf ceux qui concernent de façon évidente des prestations officielles (sous la responsabilité du DIT ou d'autres entités). Toute reproduction, même partielle, n'est autorisée qu'avec l'accord de la rédaction et des auteurs.


Archives sur clé USB

Le Flash informatique ne paraîtra plus. Le dernier numéro est daté de décembre 2013.

Taguage des articles

Depuis 2010, pour aider le lecteur, les articles sont taggués:
  •   tout public
    que vous soyiez utilisateur occasionnel du PC familial, ou bien simplement propriétaire d'un iPhone, lisez l'article marqué tout public, vous y apprendrez plein de choses qui vous permettront de mieux appréhender ces technologies qui envahissent votre quotidien
  •   public averti
    l'article parle de concepts techniques, mais à la portée de toute personne intéressée par les dessous des nouvelles technologies
  •   expert
    le sujet abordé n'intéresse que peu de lecteurs, mais ceux-là seront ravis d'approfondir un thème, d'en savoir plus sur un nouveau langage.