Parlez-nous de votre projet en remplissant le formulaire ci-dessous. L'un·e de nos conseiller·es analysera vos besoins et vous recevrez une soumission gratuite sous 48 heures.
Cet article est voué à être, je l’espère, le premier d’une série d’articles dans lesquels je donnerai mes premières impressions sur une technologie, un module ou un langage dont je fais l’essai, dans un cadre professionnel ou non, dans le but d’aider d’autre programmeurs à faire des choix éclairés ou encore d’alimenter des discussions sur le sujet dont il est question.
Le premier module dont je parlerai est un CMS, que nous avons récemment eu a intégrer pour les entreprises Mode Choc et Bilodeau Canada. Les mises en ligne ne sont pas encore faites, mais nous espérons qu’elles le seront bientôt. Alchemy est une extension de Ruby on Rails qui est parfaitement compatible avec Spree. Le CMS a été développé selon l’idée que l’utilisateur devrait avoir le moins de responsabilités possible. En effet, le module ne vient pas avec un éditeur tout inclus comme dans le backend de WordPress, forçant ainsi l’utilisateur à faire le design de son article. Le module laisse plutôt au programmeur le soin de définir plusieurs types de page et de définir ce que l’utilisateur est à même d’ajouter. Les pages sont ainsi divisées en éléments, qui sont eux-mêmes divisés en « essence », ces derniers étant les types de champ (texte, images, etc.) qui constituent l’élément.
De par sa philosophie de développement, Alchemy est un CMS qui requiert un peu plus de temps de développement qu’à l’habitude. Cependant, la prise en main est plutôt simple et l’aisance avec laquelle il est possible de réutiliser des élément dans plusieurs pages rend le développement agréable. En effet, si le projet est bien planifié, chaque nouveau type de page ne requiert la création que d’un ou deux éléments, ainsi que le réagencement de ceux-ci. Les différents type de page sont définis dans des .yml avec, respectivement, quelques propriétés. Ces propriétés sont, par exemple, dans le but de rendre obligatoires ou uniques certains éléments ou transformer un essence en essence multiple. Un élément se définit, par exemple, comme ceci :
#banniere dans le haut des pages - name: banner hint: true unique: true contents: - name: banner_picture hint: true type: EssencePicture - name: banner_title type: EssenceText
hint: true
qui définit simplement une bannière avec une image et un texte, que l’utilisateur ne peut ajouter qu’une seule fois par page. Il est ensuite possible de définir de quelle manière s’affiche cet élément : en modification (backend) et sur le site lui-même, avec un partial HTML, dans lequel des fonctions sont disponibles pour afficher les « essences » que j’ai définies. Les pages se définissent un peu de la même manière sauf qu’elle possèdent des éléments plutôt que des « essences », et le partial permet d’afficher tous éléments, ou seulement certains élément selon leur noms, par exemple pour toutes mes pages je ne veux pas que la bannière s’affiche comme n’importe quel autre élément, je peux donc faire :
<%= render_elements only: 'banner' %>
pour n’afficher que celle-ci. Il est ainsi facile de voir que, bien que Alchemy mets tout le poids du design du côté du programmeur, le développement de plusieurs pages n’en deviens pas long outre-mesure. Petit bémol, Alchemy ne permet pas de mettre des éléments dans d’autres éléments, ce qui pourrait parfois être pratique, par exemple quand un élément est constitué de deux parties qui ne s’affiche pas dans le même contenant. Pour l’instant il est uniquement possible de mettre deux élément séparés dans la même page et de dire à l’utilisateur que les deux éléments doivent être ensemble. Où il est possible d’afficher certaines « essences » d’un élément directement dans le partial de la page, aucune des deux solutions n’étant particulièrement propre. Autre petit défaut, chaque élément génère deux partial dans le même dossier, qui peu facilement devenir un très, très gros dossier ou il est difficile de s’y retrouver.
En plus des éléments et des pages, Alchemy permet aussi de modifier et de créer des nouvelles« essences », si jamais celle qui sont présente par défaut ne conviennent pas à vos besoins. Cela se fait plus ou moins de la même manière que la déclaration d’un élément, avec un .yml pour le contenu, et deux partial pour l’affichage, un front-end et un back-end.
Pour permettre à l’utilisateur de modifier des éléments qui sont globaux dans le site (header, footer etc.) Alchemy propose l’utilisation de pages globales, qui sont des pages en dehors de l’arborescence normale des pages. Ces pages sont appelable de partout et permettent d’afficher leurs différents « essences » dans les layouts. Le fonctionnement final, dans les headers et footers est correct et permets effectivement à l’utilisateur d’y mettre les liens de son choix, par contre le résultats est une page qui ne sera jamais publiée car elle ne contient rien de pertinent, seuls ces éléments sont utiles. Ce design un peu étrange semble venir du fait que les élément ne peuvent pas être orphelins et doivent absolument être contenu dans une page, qui devrait vraiment avoir un autre nom de ce contexte.
Côté utilisateur, Alchemy propose un backend simple, chaque langage possède sa propre arborescence de pages, celle-ci permet de créer des menus de navigation entre les pages. L’utilisateur doit donc choisir quel type de pages créer, il a ensuite la possibilité d’ajouter les éléments qui on été défini à la page. Après chaque sauvegarde d’élément une prévisualisation de la page est mis-à-jour permettant de bien voir les modifications qui ont été effectués. La prise en main semble donc plutôt intuitive, et il est facile de voir quel élément fait quoi, si ce n’est que par essaie erreur.
En conclusion, j’ai apprécié travailler avec Alchemy, le design simple et élégant est en harmonie avec le concept de Ruby. La création de pages et d’éléments est simple tout en permettant une assez bonne flexibilité pour créer facilement les pages dont on a besoin. La documentation est adéquate et les guides sont clairs quoi que leur contenu soit peu approfondi. La communauté de Alchemy est active puisque la version 3.1-stable de Alchemy ayant été mise à jour il y a peine 2 mois. Par contre, les ressources en ligne autres que les guides officiels et le github sont généralement peu nombreux. À cela vient s’ajouter le nom du module et de ses parties et le fait qu’une recherche Google a 50 % de chance de nous retourner un jeu mobile plutôt que de nous diriger vers une réponse à notre problème. L’intégration à Spree est bien effectuée et permet de facilement mettre des taxon ou des produits dans une page de Alchemy ou d’intégrer des éléments de Alchemy dans une page de Spree. Si vous avez besoin d’un CMS dans un site en rails, je le recommande vivement.
Le projet est disponible sur Github ici et le site officiel se trouve ici.
Parlez-nous de votre projet en remplissant le formulaire ci-dessous. L'un·e de nos conseiller·es analysera vos besoins et vous recevrez une soumission gratuite sous 48 heures.