Archives par étiquette : PIM

Pimcore : une étude d’opportunité

PIM, vous dîtes ?

Le PIM (Product Information Management, gestion de l’information produit en français) a pour objectif de fiabiliser, de détailler et de centraliser les informations sur les produits d’une entreprise. Dans l’environnement de commerce multi-canal actuel, il est nécessaire de contrôler la cohérence et la pertinence de ces informations avant d’alimenter les multiples canaux de diffusion de celles-ci (sur différents médias).

Le projet Pimcore

Pimcore se veut un moyen d’agréger, de consolider et d’enrichir ces informations en provenance de diverses sources de données (ERP, système legacy, SGBDR).

Pimcore est un projet développé par l’entreprise autrichienne Elements1, il est disponible et forkable sur la plate-forme Github :

https://github.com/pimcore/pimcore.git

Un dépôt contenant une démo prête à l’emploi est également accessible sur Github :

https://github.com/ElementsDev4/PimcoreDemo.git

Pré-requis techniques

Pimcore a pour pré-requis :

  • l’installation d’Apache (Nginx n’a pas été testé mais ceci ne devrait pas poser de problèmes, il s’agit à priori de traduire les règles de réécriture Apache en règles Nginx1)
  • La présence de MySQL comme SGBDR et la possibilité de garantir à Pimcore que les tables qu’il utilise sont bien en inter-classement UTF-8

La version qui a été utilisée lors de mes tests est 1.4.52 (Build 1953). Elle embarque une version 3 d’ExtJS et jQuery 1.7.1.ExtJS 4 à ce stade des développements n’est pas pris en charge par Pimcore.

PHP

Les paramètres de PHP requis sont les suivants :

  • version >= 5.3
  • memory_limit doit être au moins égale à 256M
  • magic_quotes_gpc doit être à off
  • safe_mode doit être à off (toutefois, cette fonctionnalité est devenue obsolète depuis PHP 5.3.0 et a été supprimée dans PHP 5.4.0)
  • mcrypt
  • pdo_mysql
  • iconv
  • dom
  • simplexml
  • gd
  • multibyte support (mbstring)
  • zlib / zip / bz2
  • openssl

Les paramètres optionnels sont :

  • l’extension PECL APC
  • l’extension PECL memcache
  • l’activation de pcntl
  • soap (pour utiliser l’API des webservices)
  • curl (pour utiliser l’API Google)

Il faut aussi penser à modifier les paramètres relatifs à la taille maximale des uploads.

« Fine-tuning » au niveau du serveur HTTP

La documentation officielle recommande d’augmenter le nombre maximum de fichiers ouvrables :

« Étant donné que Pimcore repose sur Zend Framework et d’autres bibliothèques assez lourdes, Apache doit charger un grand nombre de fichiers à chaque requête. Sur Debian, la limite est de 1024 fichiers ouverts simultanément, ce qui est suffisant dans la majeure partie des cas, mais pas pour les sites web à fort trafic »

Principe général de fonctionnement

schema_general

Le principe peut se résumer ainsi: « On extrait du contenu depuis une source de données, on l’agrège, on l’enrichit, on le diffuse ».

Présentation technique du produit

Pimcore fonctionne sur une base logicielle de Zend Framework, qu’il embarque dans l’archive téléchargeable depuis le site officiel1.Nul besoin donc d’installer Zend.

Compatibilité avec les navigateurs

Pimcore prend en charge un certain nombre de navigateurs de nouvelle génération :

  • Firefox >= 3
  • IE >= 8
  • Safari >= 5
  • Chrome >= 3
  • Plug-ins browser : Adobe Flash Player >= 10.1

Le cache

En raison de l’absence de prise en compte de la mise en cache par tags de Memcache, Pimcore a implémenté un cache « maison » basé sur Memcache: Pimcore_Cache_Backend_Memcached.

Cache backend

Sur le backend (interface d’administration), différents stratégies de caching sont disponibles:

  • Pimcore_Cache_Backend_Memcached
  • Cache MongoDB
  • Cache fichier (à éviter!)

Cache frontend

Côté front, seul Pimcore_Cache_Backend_Memcached est disponible.

Ouput-cache

Cible uniquement les requêtes HTTP de type GET. Pimcore rajoute ses entêtes de type X-Pimcore-Cache-*. Si une durée de vie a été spécifiée, les entêtes Cache-Control et Expires sont également présents (intéressant pour une exploitation avec un accélérateur comme Varnish…).

Pimcore déconseille vivement l’utilisation de la classe « Zend_Cache_Backend_Memcache » fournie par le framework Zend.

Memcache (ou plus exactement son implémentation « maison » par Pimcore) est indispensable au bon fonctionnement du produit sous peine de voir les temps de réponse augmenter de manière drastique !

Aspects techniques

Le coeur de Pimcore

Pimcore se décompose en trois modules fondamentaux:

  • Les documents : on créé des pages (ou des templates) qu’on remplit avec du contenu
  • Les « assets »: les ressources statiques qu’on insère dans les documents (images, vidéos, PDF…)
  • Les objets : utilisables en mode édition ou bien (et c’est ça qui nous intéresserait davantage) en mode batch avec un script CLI.

Le backend/frontend

Le backend est l’interface d’administration Pimcore : c’est là qu’on prépare les templates, qu’on agrège le contenu, qu’on gère les traductions…le frontend est la partie « visible » par l’utilisateur final sur le terminal de son choix (tablette, smartphone, web).

Développer avec Pimcore

Se servir de Pimcore suppose une bonne maîtrise de MVC, de PHP et de Zend Framework.

Développer dans le backend Pimcore c’est finalement savoir se servir du triplet MVC : savoir programmer une action au sein d’un contrôleur, savoir utiliser des vues si besoin, utiliser des patterns de routage, créer des objets « modèle ».

L’internationalisation (i18n)

Tous les documents Pimcore sont traduisibles. Évidemment, comme Pimcore embarque Zend, c’est Zend_Translate qui gère cet aspect en sous-main.
Le backend est traduit en français, le frontend a un module qui facilite la traduction sur les pages proposées à l’utilisateur final.

Les objets Pimcore

On crée des objets (Data Objects, selon la terminologie Pimcore) dont on fait correspondre les propriétés avec des éléments graphiques. Ces éléments graphiques ont des types prédéfinis par Pimcore.

Exemple : Un objet Pneu a comme propriétés « description », « image », « prix », « date_creation », on fera correspondre ces propriétés avec des éléments visuels Pimcore, respectivement « Object_Class_Data_Textarea », « Object_Class_Data_Image », « Object_Class_Data_Numeric » et « Object_Class_Data_Date ».

Cette étape de mapping est incontournable.
C’est également à ce niveau là que vont être détaillées les relations entre objets.
Les objets peuvent être importés comme exportés :

  • l’importation peut se faire sous la forme d’un batch écrit en PHP CLI
  • l’exportation se fait en CSV

Une attention particulière doit être portée sur la gestion de la capacité mémoire durant les imports, si ceux-ci portent sur un nombre conséquent d’objets. La gestion des versions, si elle n’est pas essentielle, doit être désactivée durant les importations (Version::disable()).

J’ai trouvé cette partie de la documentation assez sibylline. C’est un domaine à creuser, notamment en parcourant le forum pour y lire les retours d’expérience d’autres utilisateurs.

Les additifs (plug-ins)

Il est possible d’en programmer, tout comme il est possible d’en utiliser certains fournis par défaut :

PhpSearch est un plug-in qui sert de moteur de recherche full-text et qui fournit suggestion et auto-complétion. Il en existe quelques autres, hélas peu documentés :

http://www.pimcore.org/wiki/display/PLUGINS/Plugin+Documentations

Toutefois, le développement de plug-ins est plutôt bien détaillé sur ce lien :
http://www.pimcore.org/wiki/display/PIMCORE/Plugin+Anatomy+and+Design

Les test unitaires

Pimcore bootstrappe PHPUnit dans sa suite de test « maison » PimUnit. Un tutoriel vidéo donné en lien en fin de document explique comment installer cet outil dans l’AGL PHP Storm.

Cette fonctionnalité est quelque chose de nécessaire, dont la présence joue clairement en la faveur du choix final du produit.

Conclusion

Forces du produit

  • Pimcore a été primé en 2010 dans la catégorie produits open source innovants par l’éditeur Packt. Ces « Awards » ont récompensé de grands noms comme Joomla, Drupal, WordPress, Jquery, Sencha, Prestashop…
  • Pimcore a déjà des références solides avec des catalogues de grande dimension (plusieurs dizaines de milliers d’objets): Eurotours, Intersport, Expert…
  • L’interface est développée sur une base ExtJS, qui procure une user experience plutôt plaisante. L’utilisation du drag and drop rend le logiciel assez facile à utiliser et lui confère l’apparence d’un logiciel desktop.
  • Le système de plug-ins rend Pimcore extensible.
  • Un mécanisme de mise à jour du produit
  • Courbe d’apprentissage peu abrupte pour des développeurs déjà habitués au MVC
  • La présence de PHPUnit pour l’écriture de tests unitaires (qu’il faut s’astreindre à effectuer !)
  • Compatibilité revendiquée avec des solutions ETL open-source écrites en Java telles que Kettle ou Talend Studio2
  • Une API assez complète donne accès au cœur de Pimcore, sa documentation fait l’objet d’une mise à jour quotidienne (générée sur le dernier nightly build)

Inconvénients et limitations

  • Une communauté limitée pour l’instant (quelques centaines d’utilisateurs enregistrés sur le forum)
  • Une documentation peu exhaustive, certaines fois inexistante et truffée de fautes
  • Il faut être programmeur pour se servir de Pimcore; une personne sans connaissance basiques de PHP, de l’architecture MVC ne saura pas utiliser Pimcore
  • Interface agréable à l’utilisation certes mais pas forcément très intuitive (il faut parfois fouiller pour trouver)
  • Nécessite une configuration serveur assez particulière, notamment demandeuse en terme de capacité mémoire, les bibliothèques utilisées par Pimcore étant « lourdes »
  • Un import disponible seulement en CSV, il faut écrire un script d’importation à partir de nos sources de données
  • Pimcore a été validé sur des machines fonctionnant avec un serveur HTTP Apache, aucune documentation officielle n’existe sur l’intégration avec Nginx

Réflexions

Zend Framework va bientôt évoluer dans sa version 2 (actuellement en bêta1). Comment Pimcore va-t-il intégrer cette évolution ? Cette évolution elle-même sera-t-elle aussi importante que pour Symfony 1.4 → 2.0 ?

Il faut voir à moyen terme quelle va être la place accordée à MongoDB dans Pimcore. Pour l’heure, il existe juste une classe de gestion de cache basée sur MongoDB mais rien qui concerne le modèle de données à proprement parler.

Sébastien Ferrandez, Juillet 2012.

Liens :

Pimcore

Zend Framework