Logo Spiria

Craft, ou le CMS renouvelé

30 novembre 2017.

Dans cette jungle qu’est devenue l’offre CMS, il devient de plus en plus rare de découvrir quelque chose d’original et de solide. Craft fait partie de ce club sélect des CMS élégants et agréables à utiliser. De plus, comme on le verra, on n’a pas besoin d’être un·e programmeur·se averti·e pour manipuler et comprendre la bête. Voilà pourquoi il plaît tant aux agences de communication.

L’installation

L’élégance débute avec l’installation. On annonce ses couleurs, on est cool et créatif :

decorative

Le CMS a reconnu d’emblée l’environnement dans lequel je travaille et me suggère le français.

decorative

Bien que clair, le tableau de bord nous dit tout de suite qu’il faudra travailler un peu pour comprendre la logique derrière le CMS, construit avec le framework YII.

decorative

Les concepts

Les sections

Toute entrée (le contenu, une page) doit appartenir à une section. Celle-ci aura une URL bien définie (c’est l’équivalent d’une arborescence dans d’autres CMS). Les sections ne sont pas nées toutes égales. On peut les différencier en plusieurs types :

  • Simple. Pour une page d’accueil, une page de contact, etc. C’est l’équivalent de la page statique dans Wordpress, mais rien à voir avec les types de contenu de Drupal ou les templates de Concrete5, Processwire, etc.
  • Canaux(channels). Pour des pages dynamiques qui sont des rassemblements de contenus de type blogue, recettes, nouvelles, etc. Ils s’apparentent aux vues de Drupal ou au fameux post dans Wordpress (Concrete5 et Processwire optent pour une approche différente, moins compartimentée).
  • Structures. Pour des pages qui nécessitent un ordre précis (classement par date, par ordre alphabétique).

J’avoue ne pas avoir encore compris la nécessité de différencier canal et structure, car s’il est quelque chose d’ordonné, c’est bien un blogue ! Les URLs des canaux, tout comme celles des structures, peuvent contenir des variables dynamiques. Ainsi, les articles de blogues peuvent être automatiquement classés par date de parution, mais le « parent » est écrit à la dure... La structure semble plutôt emprunter davantage de Processwire, à savoir qu’une page dans une structure possède nécessairement un parent et qu’on peut ainsi procéder à une « récursion ». Processwire est plus simple. Comme tout est page (même les variables), inutile de créer ces distinctions. La propriété parent existe pour toutes les pages.

decorative

Craft arrive déjà programmé avec le canal News. On peut observer la manière dont l’URL est construite. Le parent est fixe.

Je me suis tourné vers l’installation démo que l’on peut obtenir gratuitement pour 48 heures chez Craft (très pratique !) afin de comprendre les structures. Eh bien, la confusion règne aussi dans leur exemple. Les canaux et les structures ont exactement le même schéma d’URL !

decorative

Aucune distinction n’est faite entre canaux et structures dans la version démo, l’URL « récursive » n’est pas spécifiée.

Les entrées

Les entrées sont les pages proprement dites d’un site. On les crée en choisissant tout d’abord dans quelle section la page apparaîtra. Ce choix guidera quels types d’entrées seront disponibles pour cette section, car une section peut contenir plus qu’un type d’entrée. Ce sont ces types qui contiennent les champs propres à une section. Vous l’aurez compris, une section peut contenir ainsi plusieurs types de pages.

On voit ici que les nouvelles possèdent deux types d’entrées. Des articles et des liens.

Les champs du type d’entrée Article

Les champs du type d’entrée Link

La mise en page des types d’entrées

La force de Craft réside sans contredit dans la liberté offerte à l’administrateur de modifier rapidement la manière dont les champs sont présentés à l’usager. On a besoin de quelques champs supplémentaires pour le type d’entrée Article ? Il suffit de glisser-déposer des champs de la zone inférieure de l'écran vers une section du haut existante ou que l’on crée.

Le glisser/déposer pour créer de nouvelles mises en page

Une nouvelle section créée.

Création de tabulation dans l’interface d’administration

La gestion et la présentation de l’information étant configurées à l’intérieur de l’interface, la nécessité de fichiers contrôleurs disparaît. Il ne reste plus à l’intégrateur·trice à peaufiner le fichier Twig correspondant.

L’arborescence des fichiers dans Craft. Le répertoire “app” contient Craft.

Gestion des médias

La gestion des médias est très élaborée dans Craft. Le CMS permet de configurer où seront situés les fichiers, comment les organiser et quelles seront les URL publiques associées à ces fichiers. Cela permet une très grande polyvalence d’autant plus qu’il n’est pas nécessaire d’utiliser le CMS pour télécharger les fichiers. Ces derniers peuvent l’être par FTP. Il suffit dans ce cas de demander une mise à jour de la liste, dans Craft. Cette polyvalence nécessite toutefois qu’on crée soi-même l’arborescence sur le site (par FTP, par exemple) et qu’on associe par la suite correctement le chemin aux différents types de médias.

Malgré ma bonne volonté, j’ai eu du mal à créer mes arborescences, Craft s’obstinant à refuser les chemins que je lui proposais. Sur ce plan de l’autodécouverte et de l’autocréation de structures, il y aurait un travail à faire. Peut-être avec la prochaine version 3 ?

Les diverses sections d’images créées à la volée. Il faut reproduire cette structure sur le serveur.

On peut créer des recadrages automatiques, cependant limités à certains comportements de base. Rien de manuel ici, fonctionnalité promise pour la version 3.

Moteur de rendu Twig

Les modèles de page (templates) sont mus par Twig. Ce moteur de rendu devient un standard dans beaucoup de CMS. Il libère de la complexité de l’affichage du contenu. En fait, il y a aussi la programmation, tel qu’expliqué plus haut. Le seul usage de PHP se fait dans les configurations de base. Ainsi, un programmeur junior peut très bien bâtir en Craft sans s’empêtrer dans le PHP. Toutefois, si un site nécessite une personnalisation poussée, il faut recourir à la programmation d’extensions et là, on sera servi ! On aura intérêt également à se pencher sur le framework YII.

Cachez ces données laides… (le Ugly Data)

Les développeurs de Craft ont pris grand soin de faciliter la conception d’un site web au travers de l’interface d’administration. Cela étant dit, le travail n’est pas aussi pur au niveau de la base de données. La table craft_content est un cimetière d’entrées NULL. Ceci est très étonnant quand on sait que YII roule sous le capot. S’il est une chose que YII excelle, c’est de pouvoir définir une base de données relationnelle bien structurée et d’offrir le nécessaire CRUD. Pourquoi ne pas avoir tablé sur une structure éprouvée est un mystère pour moi, mais je ne suis pas non plus un spécialiste des bases de données. Voir ici pour la même discussion.

decorative

La table craft_content, un champ de ruines NULL.

La gestion multilingue

Créer un site en plusieurs langues n’est pas très compliqué... pourvu qu’on paie, car la fonctionnalité n’existe que pour le compte Pro à 300 USD. Je me suis donc tourné vers la version démo pour essayer de traduire le site d’exemple en français. Ça se fait rapidement et, “oh ! surprise” ou “oh ! problème”, l’interface au départ anglaise se transforme aussitôt en français alors que je n’avais rien demandé en ce sens. Pour retourner à l’anglais, il faut changer ses préférences dans la section de son profil.

Conclusion

Je n’ai jamais construit de site en Craft. Je sais que certaines agences montréalaises l’utilisent et je comprends pourquoi. J’ai été impressionné par la solidité de la solution de facture résolument contemporaine. Les concepts sont faciles à retenir et je choisirais d’emblée Craft au lieu de l’alambiqué Wordpress. Avec un peu d’habilité, on peut monter très vite un site. Il suffit surtout de comprendre Twig (ce qui est fort aisé) et la documentation sur le site de Craft est on ne peut plus claire.

Un bémol. Même pour un petit site vitrine, on se sentira vite à l’étroit avec la solution gratuite. La structure de prix est plutôt restrictive (la formule gratuite est réservée aux “sites bâtis pour et par le développeur” — comprendre “site personnel”). Pour monter un site multilingue avec plusieurs usagers internes, il faut déjà payer près de 500 CAD. D’autres CMS offrent de base ce type de fonctionnalités. Dans un contexte d’entreprise, cette somme demeure dérisoire, mais pour le site d’une modeste association par exemple, c'est un peu rédhibitoire.

L’autre bémol est bien entendu la part de marché de ce CMS, associé au fait que les extensions sont plutôt rares. Pour des programmeurs professionnels, encore une fois, ce n’est pas un problème majeur, puisque rien ne vaut son propre code.

Craft est dans une classe à part. C’est une solution originale et l’arrivée de CraftCommerce en 2016 en a fait un CMS de choix pour une agence devant palier à plusieurs situations. Je m’interroge toutefois sur la réelle pertinence de ce CMS dans un contexte où il faut aller au-delà d’un simple site vitrine. Peu importe le CMS qu’on choisit, on finit par mettre les mains dans le cambouis. Pour des petits ajustements ici et là, ça peut aller, sinon je serais encore porté à me diriger vers Processwire ou des frameworks. Mais j’ai sans doute un certain parti pris, je le concède.

Toujours est-il que Craft brille de tous ses feux. Les critiques sur Internet sont généralement bonnes, le CMS fut déclaré meilleur CMS pour la petite entreprise en 2014, meilleur CMS pour les développeurs en 2015 par CMS Critics et ça continue en 2017