2. Problématiques et réflexions

Problématiques à résoudre et réflexions autour de l’emploi de Wagtail.

2.1. Interface d’administration

  • Wagtail a sa propre admin qui écrase totalement celle de Django;
  • L’admin Wagtail utilise un système de panels à définir pour chaque champ éditable;
  • Le schéma des panels est à définir dans chaque modèle;
  • Quid des applications tiers non prévues initialement pour Wagtail ? Y’a t’il un système d’inspection et rendu automatique dans l’admin pour ces applications ?

2.2. Les pages CMS

  • Une page CMS tel qu’on la connait avec DjangoCMS permet de gérer plusieurs contenus de multiples types;
  • Une page Wagtail n’accepte qu’un seul contenu d’un type précis implémenté par son modèle de données;
  • L’éditeur de texte embarqué pour les “contenus riches” est Hallo. Très rudimentaire, se concentre uniquement sur le contenu (pas d’édition html, pas de div, pas de styles, etc..);
  • Comment gérer la multiplicité des possibilités de mise en forme sans avoir à modifier le modèle de données pour ajouter/retirer les champs de contenus pour s’adapter à chaque mise en forme ?

2.2.1. StreamField is the key

La solution se trouve dans les StreamField.

Un StreamField est un champ de modèle de page qui est un conteneur virtuel pour des contenus et de type variables. Dans cet aspect il est un peu l’équivalent du placeholder de DjangoCMS.

Contrairement à DjangoCMS où les plugins se rendent globalement disponible dans tout les placeholder. Dans Wagtail chaque modèle de page doit (éventuellement) définir ses StreamField.

Dans l’admin, un StreamField accepte une quantité quasiment infinie de type de contenu qu’il peut ajouter, supprimer ou modifier. À noter que dans ce cadre, Hallo devient beaucoup moins gênant.

Dans le template de la page, chaque StreamField peut avoir son propre template d’où il gèrera le rendu de chacun de ses contenus.

L’astuce est de développer une variété de block standard (image+texte à coté, variante aligné à droite, liste d’élément avec images, bloc de citations, un carousel, etc..) qui pourront être ajouté à des StreamField lors du développement des modèles de pages. La standardisation des mises en forme sera notre salut.

Pour visualisation voici une capture d’écran d’une page avec un StreamField et un autre block field pour un carousel.

Dans le StreamField, on peut voir un icone “+” arrondi au début avant les contenus et qui s’affiche aussi entre chaque block et à la fin de la liste. Il permet d’ajouter de nouveaux bloc entre d’autres, on peut aussi retirer chaque bloc ou les déplacer d’un à un vers le haut ou le bas.

Lorsque l’icone “+” est cliqué un panneau s’ouvre pour séléctionner le type de block que l’on veut ajouter et ensuite ce nouveau block est ajouté et il peut être rempli.

(Les captures prises par Firefox ont un bug qui affiche la barre de sauvegarde à une mauvaise position, en réalité elle est continuellement fixée au bas de l’écran)

2.3. Zinnia

  • C’est un moteur de blog puissant et flexible;
  • Il n’est pas intrinsèquement lié à DjangoCMS et a sa propre admin;
  • L’admin wagtail prends la main sur celle de django, il faut donc lui réimplémenter une admin wagtail;
  • Inquiétude sur le code embarqué dans les vues d’admin standard de Zinnia qu’il faudra récupérer ou refaire;

2.3.1. Puput is the key

Puput s’impose comme un digne remplacant de Zinnia dans le contexte de Wagtails.

Il dispose d’environ 70% des fonctionnalités de Zinnia, moins les fonctionnalités dépassés (comme les pingbacks).

Titre, chapeau/résumé, contenu principal, image, tags, dates de publication constituent un article.

Dans le contexte de Wagtail, on crée une page de type “Blog” où toute ses pages enfants seront des articles. On peut si besoin crée plusieurs blogs distincts sur une même racine.

2.4. Recherche

Un système de recherche dans les contenus est intégré à Wagtail.

  • Dans les modèles de pages on définit les contenus à utiliser pour la recherche;
  • On peut définir dans les settings (de l’interface d’admin) des termes de recherches favoris pour promouvoir des contenus d’après un motif donné;
  • Le système est il intrinsèquement lié au moteur de recherche intégré ou peut il bénéficier d’un autre moteur tiers ? Oui, un backend elasticseach est inclus et on peut créer le sien si besoin;
  • Performance et pertinence en pratique de ce système ?
  • Need tests;