Étude du Planet eZ Publish.fr (1/3) : organisation et import des articles

Cette série de 3 billets présente les principaux points de la conception et de la réalisation du Planet eZ Publish.fr avec eZ Publish.Il s'agit d'un site simple à tous les niveaux, mais il concentre tout de même quelques astuces que j'espère intéressantes !

  1. Organisation et Import des articles
  2. Modules/vues sur mesure et templates
  3. Performances : caches et compagnie

Organisation

Classes de contenu

Arborescence Planet eZ Publish.fr

Pour tout site réalisé avec le CMS eZ Publish, la détermination de l'arborescence ainsi que la définition des classes de contenus est l'étape préliminaire nécessaire. Dans le cas du Planet, le cahier des charges est assez simple, il s'agit d'importer des billets (classe Post) de divers blogs (classe Site) francophones consacrés à eZ Publish. Je souhaitais aussi pouvoir gérer une liste de Planets, le Planétarium, (classe Site également) avec pourquoi pas l'affichage des derniers billets de chaque Planet.

J'ai aussi créé une classe Planete qui sert de page d'accueil au Planet actuel. Le but de la création de cette classe est multiple :

  • elle permet d'avoir un affichage spécifique sans faire une surcharge sur le node id de la page d'accueil qui peut changer aux grès des évolutions du site
  • si un jour je souhaite que la même instance eZ Publish héberge d'autres Planets, le travail sera restreint à la duplication de l'arborescence
  • La définition d'une classe spécifique permet également de faciliter l'écriture des règles de vidage de cache dans le fichier viewcache.ini .

À cela, il faut ajouter les inévitables pages À propos (classe Page) et formulaire de contact (classe Formulaire de contact) ainsi que la classe Folder existante pour des questions d'organisation du contenu et de gestion de cache.

Arborescence

À partir de cette liste de classes, l'arborescence est assez « évidente ». Le découpage se fait naturellement et en plus il permet de gérer facilement les caches template (cache-block ) en évitant que tous les blocks n'expirent avec la racine. Elle est aussi prévue pour faciliter la construction du menu horizontal.

Import des articles et nettoyage

Contrairement à un site classique, le contenu sur un Planet provient d'autres sites via leur flux RSS. Ma première idée était d'utiliser le mécanisme d'import RSS d'eZ Publish. J'avais commencé par écrire un Content Edit Handler qui, pour chaque objet Site, créait un import RSS utilisé ensuite par le script de cronjob rssimport.php. Mais la fonctionnalité d'import RSS souffre de plusieurs limitations / bugs gênants :

  • mauvaise utilisation du guid/link pour générer le remote id
  • le script rssimport.php ne met pas à jour les articles importés
  • le format Atom n'est pas supporté
  • les modules courants du format RSS ne sont pas non plus pris en compte (Dublin Core, Content,…)

Le script rssimport.php me semble par ailleurs assez mal écrit, du coup, j'ai choisi d'en écrire un autre quasiment from scratch basé sur le composant Feed des eZ Components et le mapping entre champs du flux et champs des objets Post est fait dans un simple fichier de configuration.

Parallèlement au script d'import RSS, j'ai aussi écrit un script de nettoyage des articles issus des Planets puisque seuls les 5 derniers de chaque source sont liés sur la page Planétarium, autant ne pas encombrer la base pour rien.