Retour d'expérience sur le CMS Bolt
Bolt est un CMS créé en 2013, qui en est maintenant à sa troisième version majeure. Il est basé sur le micro-framework Silex ainsi que sur différents composants Symfony.
A partir de la version 3, Bolt nécessite au minimum la version PHP 5.5.9 et supporte pleinement PHP 7.
Ce CMS utilise aussi des composants open source et propose un catalogue d’extensions pour ajouter des fonctionnalités plus spécifiques, même si ce dernier est déjà bien complet.
Les librairies tierces utilisées par BOLT :
- Doctrine DBAL for database access and abstraction
- Twig the flexible, fast, and secure template engine
- Guzzle HTTP client
- Bootstrap HTML, CSS, and JavaScript framework
- Font Awesome iconic font and CSS toolkit
- jQuery a fast, small, and feature-rich JavaScript library
- Magnific Popup a responsive lightbox & dialog script
- CodeMirror a versatile text editor implemented in JavaScript
- CK Editor a clean HTML5 WYSIWYG editor
- Pseudo-latin Lorem Ipsum dummy-texts are generated by Loripsum.net
Bolt CMS, comme tout CMS, permet d’accélérer le développement d’un backend complet avec la gestion du CRUD pour de nombreux types de contenus.
Gestion du contenu
Sur la partie Backend ont peut gérer le contenu via les contenttype. Ils se définissent en yml sur un fichier de config contenttype.yml. Un exemple de contenttype :
pages:
name: Pages
singular_name: Page
fields:
title:
type: text
class: large
group: content
slug:
type: slug
uses: title
image:
type: image
teaser:
type: html
height: 150px
body:
type: html
height: 300px
template:
type: templateselect
filter: '*.twig'
taxonomy: [ groups ]
recordsperpage: 100
Dans notre contenttype on défini le nom du type de données, les champs du type de données auxquels on assigne un type (text, slug, image, html, …) et ses paramètres.
Beaucoup de champs sont disponibles par défaut et il est possible d’en ajouter via les extensions ou d’en développer de nouveaux.
Les champs disponibles de base : text, slug, textfield, html, markdown, image, imagelist, select, integer, float, checkbox, date, datetime, file, filelist, geolocation (avec preview google map), video (avec preview), templateselect, repeater, hidden.
Le champ de type repeater permet de répéter un groupe de champs graphiquement ainsi que de gérer l’ordre d’affichage.
En plus de cette définition de base on peut créer des relations entre contenttype, définir un template par défaut de détail ou de listing, donner un statut de publication par défaut ainsi qu’un ou des groupes de taxonomy et bien plus encore préciser dans la documentation qui est assez complète.
Les taxonomy, éléments présents sur la plupart des CMS, sont aussi gérés par Bolt. Exemple de définition de taxonomy :
tags:
slug: tags
singular_slug: tag
behaves_like: tags
postfix: "Add some freeform tags. Start a new tag by typing a comma or space."
allow_spaces: false
#listing_template: tag-listing.twig #custom template
groups:
slug: groups
singular_slug: group
behaves_like: grouping
options: { main: "The main group", meta: "Meta group", other: "The other stuff" }
has_sortorder: true
categories:
name: Categories
slug: categories
singular_name: Category
singular_slug: category
behaves_like: categories
multiple: true
options: [ news, events, movies, music, books, life, love, fun ]
Chaque groupe de taxonomy peut être configuré pour que chacun ait un fonctionnement bien distinct :
- système de tags (relation et attribution multiple)
- insérer un contenu dans un groupe (attribution unique)
- attribuer une ou des catégories prédéfinies
Les templates
Sous BOLT les templates sont créés via TWIG, langage de templating utilisé par défaut sur le framework Symfony, et peuvent soit être liés à des contenttype ou rester indépendants.
Les templates sont rangés dans un dossier thème qui est renseigné dans la configuration générale. Pour des sites génériques on peut donc facilement passer d’un thème à un autre.
Le contenu d’un dossier thème reste assez classique avec des dossiers pour chaque type d’assets (CSS, images, JS), un dossier partials contenant les template twig réutilisables, un dossier source dans lequel on peut placer tous nos assets SCSS avant compilation, et enfin, à la racine, les templates twig correspondant à nos pages.
Les développeurs bénéficient ainsi d’une grande souplesse tout en gardant une bonne organisation de leurs fichiers.
Gestion des fichiers / images
Bolt contient un gestionnaire de fichiers pour les éditeurs de contenu très complet avec une nouveauté intéressante: stack, qui affiche une pile des derniers fichiers uploadés.
On peut configurer les dimensions par défauts des images souhaitées :
thumbnails:
default_thumbnail: [ 160, 120 ]
default_image: [ 1000, 750 ]
quality: 80
cropping: crop
notfound_image: view/img/default_notfound.png
error_image: view/img/default_error.png
save_files: false
allow_upscale: false
exif_orientation: true
# browser_cache_time: 2592000
La gestion des images inclut une gestion des miniatures très efficaces pour les développeurs qui permet en utilisant par exemple le code ‘{{ thumbnail(record.image, 400, 320) }}’ de générer des images avec une taille fixe à la volée (générées lors du premier appel puis réutilisées pour les suivants).
Le multilingue
Le CMS n’intègre pas aujourd’hui en natif le fait de créer du contenu multilingue. Une extension a été développée pour permettre de passer d’une langue à une autre sur l’édition de contenu. Malheureusement les autres extensions ne sont pas forcément compatible avec l’extension BOLT Translate.
De même, l’extension d’i18n n’est pas compatible avec toutes les fonctionnalités de Bolt provoquant quelques erreurs.
Les extensions
Comme vu précédemment, BOLT permet de développer et d’installer des extensions pour étendre les fonctionnalités du CMS. Mais attention, les extensions ne sont pas forcément compatibles entre elles et peuvent ne pas fonctionner avec les dernières versions de BOLT.
Une liste d’extensions utiles :
- Bolt translate : pour avoir du contenu multilingue
- Bolt forms : permet de gérer ses formulaires via une configuration et de personnaliser facilement leurs templates
- Bolt SEO extension : ajout d’un champ de type SEO qui permet de personnaliser ses metas selon le contenu avec une preview.
- MenuEditor : Permet de gérer graphiquement les menus
- DragSort : Ajoute la possibilité de trier son contenu avec un drag and drop
- Bolt Labels : Pour le multilingue, nécessite de placer un label dans le template et permet de renseigner ses traductions depuis le backoffice via un tableau.
- Google Tag Manager + Google Analytics
L’ensemble des extensions sont disponibles à cette adresse : https://market.bolt.cm/
Création d’extension locale
L’ajout de fonctionnalités à son projet Bolt passe par la création d’extension locale.
Les extensions locales permettent facilement de :
- Ajouter des tags Twig
- Ajouter des Hooks dans les templates
- Créer des champs personnalisés utilisables dans les contenttypes
- Créer des thèmes
- Ajouter des gestionnaires de fichiers qui supportent différents systèmes de fichiers
- Ajouter un générateur de thumbnail personnalisé
Bolt propose aux développeurs des starters d’extensions qui permettent de démarrer rapidement leur développement. Par la suite, il ne vous restera plus qu’à proposer votre extension locale sur le market bolt !
Conclusion
D’après mon expérience acquise en développant un projet avec ce CMS, Bolt est adapté pour les projets mis en place par des développeurs expérimentés sur le langage PHP. Son évolutivité, sa base sur Silex et Twig, sa documentation et ses fonctionnalités de base permettent de créer rapidement un projet avec des fonctionnalités basiques.
Par contre, il peut paraître un peu austère niveau ergonomie et UI car les interfaces restent classiques et n’utilisent pas de chargement AJAX qui le rendrait plus moderne.
Le CMS Bolt est en développement constant et ne devrait que s’améliorer. Sa base assez épurée donne une impression de légèreté que l’on ne retrouve plus sur de nombreux CMS PHP.