eZPublish propose d’importer des données via un flux RSS (Administration / Syndication). Cette fonctionnalité est très pratique lorsque le flux RSS en question est normé. Notamment avec les éléments <channel> et <item>. En revanche si le flux est un peu farfelu cela pose problème.
Pourquoi ?
L’assistant propose de mapper les champs du flux RSS sur les champs d’une classe d’objet (voir capture ci-dessous). Or il propose uniquement les valeurs classiques d’un flux :
Comment ajouter de nouveaux champs personnalisés pour l’import rss sous eZPublish ?
- Créer une extension nommée comme vous le souhaitez (ex: myImportRss)
- Dans cette extension créer un répertoire rss
- Dans ce dossier rss créer un fichier qui à pour but d’overrider le fichier rssimport.php, le nommer nomdevotreextension+rssimport.php (ex : myImportRssrssimport.php
- Activer votre extension dans le site.ini de votre siteaccess administration.
- Compléter votre fichier myImportRssrssimport.php en overridant la fonction rssFieldDefinition() :
<?php // Nom de la classe doit être <active_extension> + 'rssimport' class myImportRssrssimport { public function rssFieldDefinition() { //Définir la structure des champs personnalisés de votre xml personnalisé (exemple avec une balise events ci dessous) return array( 'events' => array( 'elements' => array( 'id', 'ref', 'titre', 'datedebut', 'datefin'))); } } ?>
Une fois votre fonction rssFIeldDefinition() personnalisée vous pourrez voir apparaitre vos nouveaux champs dans la liste déroulante de l’éditeur d’import RSS. Ensuite vous n’avez plus qu’à les mapper via l’assistant à votre classe et le tour est joué !
2 Responses
Bonjour,
J’ai du mal à comprendre comment créer l’extension.
Faut-il suivre l’arborescence classique d’une extension (nomExt > modules, nomExt > settings, etc.) ? Dans ce cas le dossier RSS se trouve dans « modules » ? Ou au même niveau ?
Ou alors faut-il uniquement créer un dossier pour l’extension, avec pour seul sous-dossier « rss » ?
Bonjour Antoine,
Désolé pour le temps de réponse je n’avais pas fait de tour sur mon blog depuis un moment (shame on me 🙂 )
Voila la structure qu’il faut avoir au niveau des dossiers :
extension /
Myrssimportextension
Rss
Myrssimportextensionrssimport.php
Dans le fichier bien pensé à nommé la classe du même nom que le fichier et penser aussi à utilisé une méthode static rssFieldDefinition qui retourne un tableau de même forme que eZRSSImport :: rssFieldDefinition ();