Planet eZ Publish.fr mis sur orbite par eZ Publish 5!

(English version available on share.ez.no)

Comme annoncé via Twitter et Google+ il y a une semaine, le Planet eZ Publish.fr est dorénavant mis sur orbite par eZ Publish 5 (en réalité des clones github du 04/12/2012 soit quelque part entre la version 5.0 et les futures 2012.11/2012.12). Pour autant que je sache, il s'agit du premier site utilisant eZ Publish 5 ou au moins qui ne se contente pas d'utiliser le fallback sur la partie legacy (ie eZ Publish 4.x). En effet, j'ai tenté de ré-implémenter au maximum le site dans la nouvelle pile basée sur Symfony 2. L'ensemble du code source est disponible dans le dépôt git dpobel/planet-ezpublish.fr, pour les curieux les éléments dignes d'intérêt se situent dans le PlanetBundle et dans les fichiers de configuration ezpublish.yml, override.yml et parameters.yml.

Nouvelle stack vs. legacy

Au final, il reste 3 fonctionnalités basées sur la partie legacy :

  • Le formulaire de contact, les attributs collecteur d'information n'étant pas pris en charge pour le moment
  • Le moteur de recherche, là encore l'intégration de Solr est incomplete
  • Un script de nettoyage de la partie planétarium, pour ce dernier point, j'avoue que c'est par pure flemme :-)

À l'inverse, le reste du site n'utilise que les nouvelles API et le moteur de template Twig:

Bugs et difficultés diverses

Sans surprise, il y a quelques bugs dans cette nouvelle version; pour une version majeure en point 0, le contraire aurait été très étonnant, mais il y a aussi des manques plus globaux.

D'une manière générale, l'API publique est très verbeuse. J'ai publié un gist qui compare le code nécessaire pour récupérer une liste de nœuds triée par priorité dans l'ancienne et la nouvelle API. Je crois que le constat est assez clair. Pour éviter de répéter encore et encore, les mêmes bouts de code, j'ai 2 méthodes utilitaires dans une surcharge du Location service. Avec le recul, ce n'est probablement pas la meilleure manière de faire, mais en tout cas, cette petite addition m'évite de me répéter.
 
Les templates eZ Publish 5 sont radicalement différents des templates eZ Publish 4.x. Et c'est pas uniquement une question de langage. Le point le plus impactant est la disparition de nos bonnes vieilles fonctions fetch. Il s'agit d'une excellente chose en terme d'architecture technique mais en l'état elle complexifie un peu l'écriture de template. Il est en effet assez rare de pouvoir se contenter du contenu et de l'emplacement de ce contenu pour générer la vue d'objet. Dans ce cas, une solution est d'appeler dans une sous requête une action d'un controller custom (voir par exemple la vue full correspondant à la page d'accueil). Une autre solution consiste à utiliser l'évènement ezpublish.pre_content_view mais cet évènement est générique ce qui oblige à détecter d'une manière ou d'une autre dans quel cas l'évènement est lancé ce qui n'est pas forcément évident (voir par exemple PlanetBundle/EventListener/PreContentViewListener.php). Bref, pour moi il manque quelque chose ici qui permette de facilement injecter des paramètres dans les templates de vue.

En tant qu'ancien intégrateur, j'espère qu'on pourra remédier à ces deux points pour rendre le au jour le jour développement un peu plus facile.

Performances

Qu'en est il des performances ? Contrasté est probablement le terme le plus adapté. En effet, sur un site sans identification et peu d'évolution dans le contenu, il est relativement facile de maximiser l'utilisation du cache HTTP et de finalement atteindre les performances du reverse proxy Symfony 2. Dans ce cas eZ Publish 5 est assez nettement supérieur à eZ Publish 4.x qui servirait une page complètement cachée et optimisée (cache-block + viewcache)! Si, le reverse proxy de Symfony se révèle trop lent, il est bien sûr possible de le remplacer par un reverse proxy dédié; dans ce domaine Varnish est un candidat de choix qui apportera de bien meilleures performances encore!

En revanche, lorsque des parties de la page doivent être recalculées, les performances s'effondrent rapidement. Un chantier est en cours pour améliorer les performances des API et cela devrait durer quelques temps.

Conclusion

ÇA FONCTIONNE! À vrai dire plutôt mieux que je ne l'aurai cru il y a quelques mois! Bien sûr il reste bien des bugs à corriger et des choses à améliorer, mais clairement eZ Publish 5 est utilisables dans pas mal de cas et pour tout le reste il y a le legacy fallback :-)

Symlink to the eZ Publish var directory, a good idea ?

Symlink based directory layout

On most of my sites, I tend to adopt the following folder layout:

/web/sites/planet-ezpublish.fr$ find . -maxdepth 2 -name www\* -o -name var -ls | tr -s ' ' | cut -d ' ' -f 11-14
./wwwnewdesign/var -> ../var/
./www44/var -> ../var
./var
./www2012.5/var -> ../var
./www -> wwwnewdesign

As you can see, www (the Apache document root) and www<version>/var are symlinks. The main idea behind this organization is to ease upgrades from an eZ Publish version to another, after upgrading on my developer machine and uploading the code to /web/sites/mywebsite.com/www<version>, I just have to change the symlinks on the disk and I'm done!

Cache issues

I know that some others are using a quite similar setup but Nicolas and Arnaud seem to encounter caching issues with it. At first, I answered that this is working as expected for me, but a while after, I discovered that I also have some cache issues on Planet eZ Publish.fr (mainly cache-block not being expired) while the same setup on pwet.fr/t-ka.net does not seem to be affected.

Actually, this comes from the configured file handler. pwet.fr/t-ka.net eZ Publish instance is configured with the eZFS2FileHandler while Planet eZ Publish.fr was configured with eZFSFileHandler. And there is a big difference between those file handlers: when a cache file is outdated, eZFSFileHandler will try to remove it while eZFS2FileHandler just sets a specific last modified time to mark it as expired (this is the base of the stale cache mechanism). In addition, a protection had been added in eZ Publish (and it's enabled by default) to not let it remove files that are outside of the eZ Publish directory, and of course, this is the case with the symlink layout above. So the cache issue is not a bug, it's a feature ;-)

So if you want to use this kind of setup, you have to configure your eZ Publish instance with the eZFS2FileHandler. But keep in mind, that eZFS2FileHandler is still a bit experimental and that 2012.4 and 2012.5 community releases were affected by this bug, so you'd better apply this patch to keep your images!

Peinture fraîche sur le Planet eZ Publish.fr

Attention, la peinture est toute fraîche sur le Planet eZ Publish.fr! Après la migration du code sur Github et la mise à jour d'eZ Publish 4.4 vers eZ Publish Community Project 2012.5 il y a une dizaine de jours, j'ai donné un gros coup de frais au design du site. Ce nouveau design se veut évidemment plus sympa et est aussi responsive pour une mise en page optimisée en fonction des capacités de la plate-forme utilisée. En principe, il ne devrait pas y avoir de problèmes d'affichage sur les navigateurs modernes et même avec Internet Explorer 8 et supérieur mais je ne suis pas maso, j'ai pas cherché la compatibilité avec les versions 6 et 7 même si ça ne doit pas être si terrible :-)

J'en ai aussi profité pour intégrer eZ Find et Solr ce qui m'a donné l'occasion de mettre en place le nouveau mécanisme de plugin lors de l'indexation permettant notamment d'ajouter des champs spécifique dans l'index Solr ce qui est utile dans mon cas pour générer les facets par auteur (qui ne sont pas des auteurs au sens eZ Publish du terme).

Comme d'habitude, les commentaires, inscriptions, rapports de bug ou même les pull requests sont les bienvenues !

"Mortel Poutou" :-)

Elle mériterait d'atterrir sur lolgislatives 2012 celle là :-) Ah bah c'est fait Le poutou de la mort :-)

Quelques nouveautés dans le formulaire d'édition de contenu d'eZ Publish

(English version available on share.ez.no)

eZ Publish Community Project 2012.3 est sortie aujourd'hui. L'extension ezautosave est embarquée et activée par défaut, elle ajoute un nouveau widget pour faciliter la prévisualisation de contenu depuis le formulaire d'édition. J'ai ajouté cette fonctionnalité via une pull request faite avec mon chapeau de membre de la communauté; j'en suis plutôt fier ;-)

En plus de cela, plusieurs améliorations du formulaire d'édition dans l'interface d'administration avaient déjà été ajoutées dans les dernières versions:

  • le mode plein écran a été supprimé pour être remplacé par un barre d'outil fixe en haut de l'écran pour avoir à disposition les principaux boutons;
  • le menu de gauche peut être caché, son état est stocké dans une préférence pour le conserver après un rafraîchissement de page;
  • dès que vous scrollez vers le bas, un lien pour retourner en haut du formulaire fait son apparition;
  • l'extension ezautosave fait en sorte de sauvegarder automatiquement le brouillon en cours pendant l'édition;
  • l'extension ajoute aussi le lien de prévisualisation mentionné ci-dessus dans la barre d'outil fixe

Une image vaut mille mots, qu'en est il d'une vidéo ? ;-)

(Visualisation en HD fortement conseillée)

Flux RSS des billets

Flux RSS des billets

Rechercher sur pwet.fr

À retenir

Derniers commentaires

Archives

Nuage de tags

Bioutifoul photos

Quelques liens

Licence d'utilisation

Contenu sous Licence Creative Commons By-Sa

Sauf mentions spécifiques, les billets et les photos publiés sur ce site sont placés sous la licence Creative Commons by-sa.

Pour toute utilisation dépassant le cadre de cette licence, merci de me contacter par e-mail.

Login