Quelques nouveautés d'eZ Publish 4.1

Il n'y a pas que des améliorations de performances dans eZ Publish 4.1. L'annonce de la sortie de la version 4.1 liste les plus grosses nouveautés (stale cache, object states, ...) et d'autres améliorations attendues depuis un bon moment. Je pense en particulier à l'ajout de déclencheurs sur d'autres opérations que l'affichage d'un objet (content/read), la publication (content/publish) ou ceux dédiés au module de boutique. Mais eZ Publish 4.1 apporte aussi d'autres améliorations qui sont passées pour le moment un peu inaperçues comme l'amélioration des content edit handler ou les extensions de type output filter.

Validation avec un content edit handler

Jusqu'à eZ Publish 4.0 un content edit handler permettait uniquement lancer un bout de PHP au moment de la publication d'un contenu. Il s'agit d'un mécanisme apparu dans eZ Publish 3.8 qui permet d'implémenter tout un tas de fonctionnalités comme la mise à jour d'un cache spécifique, la publication à partir d'une date renseignée dans un attribut, la création d'un espace personnel lors de l'ajout d'un utilisateur, ... J'ai toujours vu ce mécanisme comme une sorte d'évènement de workflow post publish en beaucoup plus simple (pas de code de retour, pas de syntaxe alambiquée, pas de possibilité de laisser le travail à script cron...).

Dans eZ Publish 4.1, il est maintenant possible d'implémenter une méthode de validation dans un content edit handler, en fonction du retour de celle-ci, l'objet part en publication, sinon le formulaire affiche le/les messages comme lorsqu'on oublie de remplir un champ obligatoire par exemple. Dans certains cas, ce nouveau mécanisme peut largement simplifier les choses notamment en permettant la vérification de règles syntaxiques supplémentaires sans nécessiter le développement d'un datatype spécifique ce qui est parfois un peu lourd pour juste ajouter une validation simple (validation d'un code postal, d'une longueur minimale d'une ligne de texte, d'un domaine particulier pour un email, ...)

Extension output filter

Il s'agit d'un nouveau type d'extension qui permet d'ajouter un traitement sur le code de la page entière. La documentation dans le SVN de cette nouvelle fonctionnalité donne comme exemple la réécriture des URL des composants de la page en fonction de la position géographique. Pour les validatorophiles, on peut aussi imaginer corriger les éventuels problèmes de validation (X)HTML grâce à un filtre utilisant l'extension php-tidy ou encore remplacer des tags prédéfinis par des éléments générés par un autre système (une version PHP des SSI ou d'ESI simpliste). Bien évidemment comme cette fonctionnalité permet de traiter l'ensemble du code de la page, il faut se méfier des effets néfastes sur le temps de génération des pages.

» Commentaires

- Joli (#67746) par Bertrand le 08 Avril 2009 à 10:40
Petit tour d'horizon sympathique, bien vu :)
- Pas de *SI* dans le OutputHandler (#67747) par Jérôme le 08 Avril 2009 à 12:05
Bonjour Damien,

"Pour les validatorophiles, on peut aussi imaginer corriger les éventuels problèmes de validation (X)HTML grâce à un filtre utilisant l'extension php-tidy ou encore remplacer des tags prédéfinis par des éléments générés par un autre système (une version PHP des SSI ou d'ESI simpliste)."

+1 pour Tidy (même si j'utiliserais plus mod_tidy [1] pour faire ce travail car plus rapide).

-1 pour faire de la génération *SI (SSI/ESI..) on arrive trop tard dans le process avec le OutputHandler, même si, techniquement, c'est faisable, il est plus intéressant d'utiliser un système intégré au templating (fonction/opérateur de template) pour faire ce travail.

Bonne journée :)

1. http://mod-tidy.sourceforge.net/
- Tidy / (E|S)SI (#67748) par Damien le 08 Avril 2009 à 12:33
@Jérôme : pour tidy effectivement mod_tidy est probablement plus adapté/performant mais on fait pas toujours ce qu'on veut :)

sinon pour les SI je crois que tu m'as mal compris, je ne parle pas de positionner des instructions d'inclusion d'une ressource avec un output filter mais d'interpréter d'éventuelles instructions générées par les templates histoire d'avoir un système d'inclusion sans l'artillerie lourde. C'est une mauvaise idée ?
- interprétation *SI dans le OutputFilter (#67749) par Jérôme le 08 Avril 2009 à 14:21
Damien,

"sinon pour les SI je crois que tu m'as mal compris, je ne parle pas de positionner des instructions d'inclusion d'une ressource avec un output filter mais d'interpréter d'éventuelles instructions générées par les templates histoire d'avoir un système d'inclusion sans l'artillerie lourde. C'est une mauvaise idée ?"

Ha effectivement, j'avais mal compris (idiot inside).
Concernant ton idée d'avoir un système d'inclusion je suis assez partagé sur le sujet, car en fait si on réfléchis un peu on à ça :

Tu veux utiliser ton propre système d'inclusion, ce qui veut dire que tu vas forcément devoir retourner un tag (ou un groupe de tag HTML/XML/autre) que tu devras rechercher ensuite via ton OuputHandler afin d'appliquer le comportement correspondant. A mon avis même si c'est techniquement faisable, je crois que ça ne pourra pas fonctionner à terme car au final tu vas devoir analyser le code HTML entier, et ce peu importe la méthode (regex, tokenizer, autre) et faire ça en PHP, c'est inefficace et beaucoup trop consommateur de ressources. Faire la même chose, en C via un module apache par exemple (comme le fais mod_include pour les SSI) est plus intéressant car c'est en C donc beaucoup plus rapide. Par contre tu vas déporter ton OutputFilter de eZ Publish à Apache. Maintenant c'est vrai qu'écrire un module Apache et faire du C c'est plus long que de faire quelque chose en PHP pour la même fonctionnalité, mais au final sur le long terme, en terme de charge/perf le résultat sera beaucoup plus probant avec un module Apache (ou autre, si tu n'aimes pas Apache :) )

Si tu viens à Paris demain on pourra en parler, normalement, je serai présent (weeee je sors de ma grotte demain :)).

Bonne journée :)

» Trackback

Aucun trackback

Les trackacks sont désactivés

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