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 :

img75

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 :

img76

On peut accéder à l’administration :

img77

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 :

img85

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 :

img94

Du coup on peut choisir la langue de l’administration :

img96

Maintenant la page d’administration est en français :

img95

Les pages

On peut créer des pages, ce qui est la moindre des choses pour un CMS ! Voici l’interface :

img78

Au départ on en a une, celle qui sert à l’accueil. On peut la modifier :

img79

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 :

img80Pour tester ça j’ai pris la documentation de Laravel et j’ai créé 3 pages :

img83

Pour chaque page on peut choisir un template :

img84

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 :

img81

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 :

img82

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 :

img86

Pour un menu on crée des items :

img87

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 :

img88

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 :

img89

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 :

img90

Ils doivent respecter cette structure :

img91

Mais évidemment tout ça n’est pas accessible et il faut aussi publier les thèmes pour les retrouver dans le dossier public :

img92

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 :

img93

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 :

img97

Et aussi le menu :

img98

On a maintenant un onglet pour le français. De même dans la définition des items :

img99

Et j’obtiens ma version française du menu bien localisé :

img01

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 :

img02

Définir son rôle :

img03Et définir très précisément ses permissions :

img04

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 :

img05

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 :

img06

Il y en a deux pour les modules. Pour la création d’un module c’est :

img07

Il faut répondre à quelques question et c’est créé ! On trouve un structure de base dans les modules :

img08

Pour l’entité que j’ai prévue je trouve deux migrations :

img09

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) :

img10

Ainsi que les vues correspondantes :

img11

On peut aussi configurer les permissions :

img12

On les retrouve dans l’administration pour le module :

img13

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.

 

Laisser un commentaire