Twig pagelayout pour les modules legacy dans eZ Publish 5

Je suis en train de mettre à jour le Planète eZ Publish.fr à la dernière version d'eZ Publish 5. J'en profite pour passer en revue les problèmes ou les fonctionnalités manquantes que j'avais recontrés lors de la mise en place de la version avec eZ Publish 5 en décembre dernier. L'un de ces problèmes concernait les différences entre les pages générées par les modules legacy (ezinfo/about, planet/search,…) et le reste du site. En effet, en 5.0, il n'était pas possible d'utiliser un pagelayout Twig avec un module legacy, et donc le résultat de ces modules étaient toujours injectés dans le bon vieux pagealyout.tpl. À partir des n 2013.4 et 5.1, il est maintenant possible d'utiliser un pagelayout Twig avec les modules legacy. Il s'agit d'une fonctionnalité intéressante dans l'optique d'une mise à jour progressive vers la nouvelle stack, mais certains éléments autour de cette fonctionnalités sont intéressants.

Pour commencer, la version initiale a été ajoutée par Joe Kepley via une pull request. Il mérite un grand bravo pour ça :-)

Ensuite, en travaillant sur une amélioration, j'ai ajouté la possibilité de définir ce pagelayout par siteaccess ou groupe de siteaccess. Il n'y a pas de configuration sémantique, donc pour configurer le pagelayout à utiliser avec les modules legacy, il faut écrire la configuration suivante dans ezpublish.yml :

parameters:
  ezpublish_legacy.planete.module_default_layout: PlanetBundle::pagelayout.html.twig

Dans cet exemple, planete est le nom du siteaccess et la valeur est évidemment le chemin vers le template.

Enfin, avec quelques changements, le même pagelayout peut être utilisé pour les modules legacy comme pour le reste du site. Le principal changement et potentiellement le seul à apporter concerne le block content pour qu'il tienne compte de l'éxécution d'un module legacy. Une simple condition sur la variable module_result permet de détecter le contexte :

<!DOCTYPE html>
<html lang="fr-FR">
<!-- ... -->

<body>
{% block content %}
    {% if module_result %}
        {# we are in a legacy rendered module #}
        {{ module_result.content|raw }}
    {% endif %}
{% endblock %}
</body>
</html>

Rien de compliqué, non ? Il s'agit là d'un des nombreux ponts entre eZ Publish legacy et la nouvelle stack eZ Publish 5. Vous voulez en apprendre plus ? Si j'étais vous, je m'inscrirais à la prochaine eZ UnConference #2. Sans conteste, le moyen le plus rapide de tout apprendre ou presque sur eZ Publish 5!

Mise à jour à 14h30: cette fonctionnalité est documentée avec un exemple utilisant l'héritage de template Twig.