Gestion de l'aperçu du contenu : Le parcours d'une idée lauréate du budget participatif, menée "côte à côte"

Auteurs : Łukasz Uznański
Traduit par : Célia - W-Seils

Lire l’article complet en version originale

Dans ce rapport, Łukasz Uznański partage l'histoire derrière son idée financée par le budget communautaire et présente les premiers résultats de la nouvelle extension Content Preview.

Introduction

L'idée du contenu prévisualisé côte à côte m'a toujours hantée. Je savais que d'autres plateformes CMS offraient ce type d'affichage, et c'était frustrant de voir TYPO3 l'ignorer. Pendant longtemps, je me suis dit : « Ce serait formidable d'avoir quelque chose comme ça dans TYPO3. »

Au départ, j'imaginais quelque chose de simple, comme un bouton d'édition directement sur le front-end. Puis, lors d'un événement Developer Days, j'ai discuté avec des membres de l'équipe UX. Quelqu'un m'a parlé de Sulu CMS et de sa solution.

L'équipe UX de TYPO3 travaillait depuis longtemps sur des concepts — croquis, parcours utilisateur et chartes d'interface — et était véritablement impatiente de trouver un développeur prêt à concrétiser cette vision. Voir ces idées passer du stade de brouillon à une implémentation fonctionnelle était exactement le partenariat qu'elle espérait.

Cette amélioration significative de l'expérience d'édition de pages dans le backend TYPO3 était proposée pour la feuille de route v14, mais les ressources de développement nécessaires à sa mise en œuvre manquaient. L'idée était claire et validée ; il manquait simplement du temps d'ingénierie dédié à sa mise en œuvre.

C'est à ce moment-là que je me suis dit que ce serait peut-être plus qu'un simple bouton sur le front-end, et que je pourrais mettre en œuvre une solution similaire à d'autres solutions du marché. J'ai soumis une idée de budget communautaire pour le troisième trimestre de cette année : aperçu en direct côte à côte et édition du contenu des pages , qui a été approuvée.

Premières tentatives : module séparé et deux iframes

J'ai donc commencé mes expérimentations. Ma toute première idée a été de créer un module TYPO3 entièrement nouveau, distinct du module Page. À l'intérieur de ce module, j'ai placé deux iframes côte à côte :

  • Iframe gauche — le module de page standard
  • Iframe de droite — la page frontale rendue

Le mécanisme était simple : à partir de TYPO3, j'ai obtenu l'ID de la page actuelle, j'ai construit l'URL frontale correspondante, j'ai envoyé la requête et j'ai injecté le HTML résultant directement dans l'iframe.

Quand j'ai vu la page ainsi présentée pour la première fois, je me suis dit que ça fonctionnait vraiment. Ce n'est peut-être pas si compliqué !

Ajout de boutons d'édition

L'étape suivante consistait à rendre l'aperçu interactif. Je souhaitais des boutons « Modifier » cliquables dans l'aperçu du frontend. Pour les intégrer, j'ai essayé plusieurs approches :

  • Paramètre personnalisé — le plus rapide et le plus simple, également extensible pour de futures améliorations d'aperçu (choisi)
  • En-tête personnalisé — pas toujours pris en charge, plus limité
  • Approche basée sur les cookies — possible, mais avec des limites

En ajoutant un paramètre personnalisé à la requête frontend, j'ai pu ajouter du balisage supplémentaire : de petites icônes d'édition directement liées à l'édition d'enregistrements de TYPO3. L'aperçu frontend est alors devenu utilisable.

Mise en évidence des éléments modifiés

Une fois les boutons d'édition activés, j'ai rencontré le problème de surlignage de l'élément de contenu en cours de modification . Cela nécessitait de détecter les chemins d'accès aux enregistrements et de marquer visuellement l'élément frontal correspondant.

Là, j'ai rencontré un obstacle : j'avais besoin d' une communication inter-iframe . La seule option semblait être d'utiliser postMessage, mais ça a vite dégénéré.

  • J'avais deux iframes qui devaient communiquer entre elles
  • Les méthodes de surbrillance étaient différentes selon la page
  • Il n'était pas clair où placer la configuration

Le problème de Docheader

Je me suis dit : « Je devrais peut-être ajouter une barre de configuration dans le docheader. » Mais le module Page possédait déjà son propre docheader, et en ajouter un deuxième dans mon module basé sur iframe était source de confusion.

L'alternative était de surcharger le module Page et de contrôler son DocHeader, mais je ne voulais pas emprunter cette voie. Cela me semblait complexe et fragile.

Lors de ma discussion avec Tymoteusz Motylewski , il a confirmé mes soupçons : ce n'était pas une bonne conception. Il ne fallait pas dupliquer la navigation, et la communication entre deux iframes distincts était source de problèmes.

 

Changer de direction : une meilleure architecture

J'ai ensuite parlé avec Marcin Sągol et son conseil a tout changé : « Au lieu de construire un nouveau module avec deux iframes, pourquoi ne pas étendre le module Page existant et simplement placer un div à l'intérieur ? »

C'était une avancée majeure. L'intégration de l'aperçu directement dans le module Page :

  • Je n'avais besoin que d'un iframe
  • Pas de navigation en double
  • La communication était beaucoup plus simple
  • La gestion des langues a fonctionné presque immédiatement (presque !)
  • Je n'ai pas eu besoin de remplacer le docheader

Encore mieux : j'ai réalisé que je n'avais plus besoin de récupérer le code HTML du front-end séparément. Je pouvais simplement effectuer une requête avec un paramètre spécial, l'intercepter dans le middleware TYPO3 et modifier le résultat à la volée en injectant des boutons et des scripts. Cette approche était claire et efficace.

Que mettre dans l'iframe ? Stratégies possibles

En travaillant dessus, je me suis demandé : « Que charger exactement dans l'iframe d'aperçu ? » J'ai envisagé plusieurs options :

  1. URL frontale directe avec un paramètre de requête ou un en-tête
    • Le plus simple et le plus flexible
    • Fonctionne avec les frontends standard et headless
  2. Récupérez le code HTML du frontend et injectez- le directement dans l'iframe
    • Fonctionne, mais inefficace (navigateur inondé de données)
  3. Récupérez le code HTML du frontend, enregistrez-le dans un fichier temporaire et chargez-le à partir de là
    • Techniquement possible, mais compliqué (nécessite un nettoyage et une maintenance des fichiers)

Pour l'instant, j'ai opté pour l'option 1 , car elle laisse la porte ouverte à d'autres approches ultérieures, mais garde les choses simples.

UX et saisie frontend

À ce stade, j'ai travaillé en étroite collaboration avec le développeur front-end, Paweł Zieliński . Nous avons discuté de la manière de présenter les options de configuration aux éditeurs. Deux idées ont émergé :

  • Une barre supérieure à l'intérieur de l'aperçu
  • Un menu de hamburgers flottants

Le menu hamburger a été retenu. Il semblait plus moderne, plus léger et évitait de dupliquer la navigation existante de TYPO3.

Le menu stocke désormais des options telles que :

  • Faut-il mettre en évidence ou non les éléments de contenu ?
  • Quelle méthode de surbrillance utiliser
  • Autres configurations d'aperçu

Défis de communication

Un autre problème majeur concernait la communication iframe . Nous avions besoin de messages pour :

  • Mettre en surbrillance l'élément en cours d'édition
  • Modifier le code HTML dans l'iframe dans certains cas
  • Gardez les vues backend et frontend synchronisées

Cependant, s'appuyer sur postMessage posait problème, car il ne fonctionne pas sur plusieurs domaines. Cela signifie qu'avec plusieurs pages racines (domaines différents), vous rencontriez des problèmes de reconnexion.

La solution est venue de notre expérience avec les guides interactifs étape par étape. Au lieu de publier des messages, nous avons injecté du JavaScript personnalisé via un intergiciel. Cela a permis une communication bidirectionnelle sécurisée entre TYPO3 et l'aperçu du frontend.

Cette approche fonctionne à la fois dans les configurations HTML standard et headless, mais présente d'autres inconvénients :

  • Ce n'est pas si simple de travailler avec les survols sur l'iframe, ce n'est pas précis à 100 %
  • Pour l'instant, nous ne disposons pas de toutes les fonctionnalités de l'approche originale, car elle nécessite une réécriture.

Nouvelle approche :

Fonctionnalités expérimentales : Navigation dans l'aperçu

L'une des fonctionnalités expérimentales les plus intéressantes est la possibilité de naviguer dans TYPO3 directement depuis l'aperçu, sans utiliser l'arborescence des pages. Cette fonctionnalité est activée par défaut, mais vous pouvez la désactiver via les Paramètres.

Voici comment cela fonctionne :

  • Les liens internes sont annotés avec l' UID de la page (en utilisant AfterLinkIsGeneratedEvent )
  • Cliquer sur un tel lien déclenche la navigation en arrière-plan vers /typo3/module/web/layout?id=303
  • Vous pouvez vous déplacer sur le site en mode aperçu, tandis que TYPO3 se met à jour en conséquence

Il reste encore des questions ouvertes :

  • Les URL générées par DataProcessor n'obtiennent pas encore de paramètres
  • Les liens inter-domaines ne fonctionnent pas

Mais lorsque je l'ai montré à Rachel Foucard , elle m'a dit que mon approche était bonne et que ce type de navigation permettrait aux éditeurs de contourner entièrement l'arborescence des pages pendant leur travail, ajoutant ainsi de la valeur pour les utilisateurs finaux.

État actuel

Le projet a commencé modestement, mais il a pris une ampleur considérable. J'ai même créé une nouvelle organisation, T3-UX, pour le soutenir. L'extension s'appelle désormais Aperçu de contenu (content_preview) , car ce nom décrit parfaitement l'idée.

Actuellement, il existe deux approches de travail pour l'aperçu du contenu, que vous pouvez changer en modifiant l'indicateur de fonctionnalité :

  • Communication PostMessage — plus de fonctionnalités, mais domaine limité
  • Injection JavaScript personnalisée — expérimentale, plus propre, mais manquant de certaines fonctionnalités

Les deux sont utilisables, et présentent chacun des avantages et des inconvénients. Le choix de la voie à suivre nécessitera l'avis de la communauté TYPO3.

Le véritable défi à relever dans l'extension est de savoir comment la faire fonctionner pour la majorité des cas d'utilisation, car le frontend peut différer d'une implémentation à l'autre.

 

Feuille de route : Où devrait aller l'aperçu du contenu ?

Il ne s'agit que d'une première version, et bien qu'elle soit déjà utile, de nombreuses possibilités d'amélioration existent pour en optimiser les bénéfices. L'aperçu du contenu est disponible en tant qu'extension publique, et nous devons l'améliorer ensemble, en tant que communauté. Voici quelques pistes pour l'avenir :

  • Simulation de date de début/fin — Le contenu prévu pour une publication ultérieure ou sur le point d'expirer nécessite une simulation. Cette fonctionnalité permettra aux éditeurs de visualiser l'apparence du site demain à 10h00.
  • Simulation utilisateur/groupe front-end — De nombreux sites personnalisent le contenu par utilisateur ou par groupe. Les éditeurs devraient pouvoir simuler instantanément différents rôles.
  • Gestion des espaces de travail — La prise en charge des espaces de travail est essentielle pour TYPO3. Les éditeurs doivent prévisualiser les modifications non publiées dans les flux de travail réels. Cela nécessite une gestion avancée des états dans le middleware.
  • Modes d'aperçu et options de fenêtre — Les éditeurs fonctionnent différemment. Certains préfèrent une fenêtre flottante, d'autres un nouvel onglet. L'aperçu du contenu s'adapte aux deux.
  • Meilleure prise en charge inter-domaines — Les installations TYPO3 avec plusieurs pages racine et domaines ne devraient pas nécessiter de reconnexion. Il s'agit d'un défi technique à long terme, mais essentiel pour la convivialité.

Conclusion

Avec le recul, ce projet a commencé par une simple idée : « Mettons des boutons d'édition sur le frontend. » Mais petit à petit, au fil des expérimentations, des erreurs et des solutions plus efficaces, il a évolué vers quelque chose de bien plus ambitieux.

Nous avons maintenant un aperçu du contenu :

  • Une preuve de concept fonctionnelle , utilisable et pouvant aider les éditeurs dans leur travail quotidien
  • Deux approches possibles pour résoudre le problème
  • Navigation expérimentale directement dans l'aperçu
  • Une feuille de route claire pour l'avenir

Il ne s’agit pas seulement de technologie : il s’agit de rendre TYPO3 plus convivial pour l’éditeur, plus moderne et plus compétitif.

Impliquez-vous

L'histoire n'est pas terminée. Les prochaines étapes dépendent de la communauté TYPO3. Notre objectif premier est l'adoption par la communauté. Plus les éditeurs et les intégrateurs utiliseront Content Preview, plus nous recevrons de retours et plus vite cette fonctionnalité deviendra standard.

Nous vous encourageons à expérimenter l'extension, à donner votre avis et à signaler tout problème.

Découvrez l'aperçu du contenu sur GitHub !

Do you want to publish
a guest blog post?

 

Contact us

Do you want to publish
your own case study?

 

Get in touch