CMS Laravel : AsgardCms
Laravel est un framework simple et puissant et on voit éclore des propositions de CMS basés sur lui. Je vous propose de les examiner pour voir ce qu’ils apportent. Dans ce premier article je vais me pencher sur une réalisation française : AsgardCms.
Installation
Le site est agréable avec des couleurs qui rappellent celles de Laravel :
Il y a un forum si on a des questions.
Il y a une page consacrée à l’installation avec ces préconisations classiques :
composer create-project asgardcms/platform your-project-name php artisan asgard:install
Il y a même une vidéo en ligne.
A part le fait que j’ai dû ajouter l’extension fileinfo à PHP l’installation s’est bien déroulée. Il faut créer la base, répondre à quelques questions pour la trouver, créer un administrateur et c’est parti ! On tombe sur la page d’accueil :
On peut accéder à l’administration :
On peut changer la couleur du thème dans config/asgard.core.core.php :
'skin' => 'skin-blue',
On a le choix : vert, rouge, noir, jaune…
On peut même changer le thème complet dans le même fichier :
'admin-theme' => 'AdminLTE',
Sous le capot
Le CMS est bâti sur la version 5.1 de Laravel, peut-être parce qu’elle est LTS, à ce sujet il y a un article intéressant ici.
Il est constitué de façon modulaire avec le plugin pingpong/modules. Cette approche est intéressante parce qu’il est ainsi facile de gérer les composants du CMS. A l’installation on trouve :
- « asgardcms/core-module » pour la gestion de l’ensemble
- « asgardcms/dashboard-module »: pour l’administration
- « asgardcms/user-module »: pour la gestion des utilisateurs
- « asgardcms/setting-module »: pour les réglages
- « asgardcms/media-module »: pour les médias
- « asgardcms/page-module »: pour la gestion des pages
- « asgardcms/menu-module »: pour la gestion des menus
- « asgardcms/workshop-module »: pour la création de modules
- « asgardcms/translation-module »: pour les traductions
- « asgardcms/flatly-theme »: le thème par défaut du frontend
- « asgardcms/adminlte-theme »: le thème par défaut de l’administration
Chacun de ces modules a ses propres dépendances. Par exemple pour les médias est utilisé intervention/image. Dans le core la localisation utilise mcamara/laravel-localization.
D’autre part pour les autorisations le choix s’est porté sur cartalyst/sentinel.
Les réglages
Pour définir le titre du site, sa description… il faut aller sur la page Settings de l’administration :
On voit qu’on peut définir ici le thème (par défaut c’est Flatly mais on peut en créer d’autres), le code éventuel de Google Analytics…
On peut choisir également les locales du site, alors ajoutons le français :
Du coup on peut choisir la langue de l’administration :
Maintenant la page d’administration est en français :
Les pages
On peut créer des pages, ce qui est la moindre des choses pour un CMS ! Voici l’interface :
Au départ on en a une, celle qui sert à l’accueil. On peut la modifier :
L’éditeur est CKEditor qui est un choix classique et sûr.
On peut aussi ajouter des pages, évidemment.
Il y a également deux onglets pour la saisie des metas et données facebook :
Pour tester ça j’ai pris la documentation de Laravel et j’ai créé 3 pages :
Pour chaque page on peut choisir un template :
On peut définir autant de templates qu’on veut pour chaque thème. Par défaut on dispose de 5 templates. Il faut d’ailleurs faire attention à bien différencier les thèmes, qui sont des réglages CSS globaux, et les templates de ces thèmes qui en sont des déclinaisons.
Il est aussi possible d’ajouter des champs de saisie pour les pages, ce qui est bien expliqué dans la documentation. D’autre part on dispose d’une vidéo qui détaille cette opération.
Les médias
Pour les médias on dispose d’une page qui permet d’aller chercher un média existant ou d’en télécharger un avec une zone dédiée :
Le chargement fonctionne et on peut choisir la taille originale ou deux versions réduites (thumbnails) à l’insertion (utilisation de Intervention Image qui est un incontournable). Ces versions sont paramétrables ainsi que les filtres associés.
L’url générée est absolue :
Je préfère les urls relatives qui simplifient le déménagment des sites…
On peut configurer le système (config/asgard.media.config.php) en disque ou s3, le dossier de stockage, les types autorisés, la taille maximale…
On dispose également d’événements : téléchargement de média, liaison à une entité et dé-liaison.
Une autre possibilité intéressante : on peut établir une relation entre les médias et une entité (one to one ou one to many). Il y a des exemples bienvenus dans la documentation.
Il y a une vidéo bien faite pour ce module.
Les menus
Tous CMS qui se respecte propose un système de menus et AsfargCms ets équipé pour ça. Le composant pingpong-labs/menus est utilisé, ce qui fait qu’on peut utiliser toutes les possibilités de ce composant si on ne se contente pas de ce qui est proposé par défaut.
Pour mes pages de documentation j’ai créé un menu :
Pour un menu on crée des items :
On peut librement réorganiser les items avec un simple drag-drop.
Et pour chaque item on choisit le titre et on définit l’URI ou l’URL :
Par contre pour positionner le menu dans un template il faut intervenir dans le code, dans le partial navigation.blade.php :
{!! Menu::get('documentation') !!}
Mais une fois que c’est fait on a le résultat visuel à la sauce Bootstrap :
Petit reproche : l’item actif ne reste pas caractérisé, mais je n’ai pas creusé l’affaire.
Les thèmes
On a donc deux thèmes à l’installation :
- AdminLTE pour le backend
- Flatly pour le frontend
Il y a une page de la documentation qui explique comment créer un thème.
C’est le composant Stylist qui est utilisé pour cette partie.
Les thèmes se trouvent dans le dossier Themes :
Ils doivent respecter cette structure :
Mais évidemment tout ça n’est pas accessible et il faut aussi publier les thèmes pour les retrouver dans le dossier public :
Il y a une commande d’artisan pour le faire :
php artisan asgard:publish:theme
Un thème doit comporter un fichier theme.json avec les renseignements de base :
{ "name": "AdminLTE", "description": "This is an administration theme", "type": "backend", "version": "1.15.1" }
Le thème utilisé dans le backend est défini dans la configuration :
'admin-theme' => 'AdminLTE',
Celui du frontend est défini dans le backend :
La localisation
Un autre aspect intéressant d’AsgardCms est l’intégration de la localisation. On a déjà vu ci-dessus qu’on peut ajouter une locale dans les réglages et j’ai ajouté le français.
Quand on fait cela on ne se contente pas de donner la possibilité de choisir la langue pour l’administration mais on met en place une localisation des pages.
Il faut donc que j’ajoute les versions françaises de mes 3 pages de documentation :
Et aussi le menu :
On a maintenant un onglet pour le français. De même dans la définition des items :
Et j’obtiens ma version française du menu bien localisé :
Par contre j’ai eu un bug lorsque j’ai ajouté le français alors que j’avais déjà défini le menu en anglais, j’ai dû recommencer la définition.
Gestion des utilisateurs
Un autre aspect essentiel d’un CMS est la gestion des utilisateurs et de leurs rôles. L’utilisation de cartalyst/sentinel est efficace.
On peut ajouter ou modifier un utilisateur :
Définir son rôle :
Et définir très précisément ses permissions :
Je n’ai pas représenté la page complète mais elle est très longue !
Par défaut on dispose de deux rôles :
Mais on peut libremement les modifier et en ajouter d’autres.
On peut ajouter des datas pour les utilisateurs mais pour cela il faut créer un module de profil, et ça demande un petit peu de codage.
Les modules
Puisque ce CMS est modulaire on peut se demander comment créer un module, est simple ou ardu ? Et bien il y a un module pour la création des modules : le workshop. Avec une ligne de commande on peut créer la structure du module qu’on veut créer.
Si on regarde dans artisan on voit que le CMS a créé quelques commandes :
Il y en a deux pour les modules. Pour la création d’un module c’est :
Il faut répondre à quelques question et c’est créé ! On trouve un structure de base dans les modules :
Pour l’entité que j’ai prévue je trouve deux migrations :
La première est pour l’entité elle-même et la seconde pour les traductions.
On a aussi un contrôleur tout prêt pour l’administration (et aussi les routes) :
Ainsi que les vues correspondantes :
On peut aussi configurer les permissions :
On les retrouve dans l’administration pour le module :
Je n’ai pas creusé l’affaire mais ça semble bien construit et efficace.
Conclusion
AsgardCms est un CMS bien conçu, complet, facilement extensible grâce à sa modularité, qui offre une bonne gestion des pages et des médias, qui intègre une localisation et qui s’adresse essentiellement à des développeurs.
8 commentaires
Hamdi
Bonjour, S’il vous plait,comment faire pour accéder à la page d’administration de asgardcms? Je n’y arrive pas. aidez-moi.
bestmomo
Bonjour,
Cet article commence à dater et le framework a beaucoup évolué au vu du site de référence. Normalement l’administration s’atteint avec l’url /backend .
Hamdi
D’accord. merci
riftone07
bonjour je voulais savoir comment integrer l’api youtube sur un site laravel
bestmomo
Bonjour,
Je n’ai jamais fait ça mais il existe un package bien noté.
Velkacem
Je tiens d abord a vous remercier pour votre effort je voulais que tu nous fasses un tuto sur les droits d accès en profondeur sur laravel meeci
Velkacem
Et un exemple de systeme de réservation booking etc
bestmomo
Bonjour,
Pour ce qui concerne les droits d’accès Laravel est peu équipé pour ça et en général on passe par un package si on a des besoins particuliers.
L’idée de système de booking est intéressante.