Les avantages de Contao pour les développeurs

Les avantages de Contao pour les développeurs

Disclaimer : Cet article est destiné à un public technique. Vous pouvez y apprendre quelques trucs sur Contao, même sans être développeur, mais ne vous étonnez pas de lire des choses qui sonnent comme du Grec Ancien :)

Il est fort probable que vous n'ayez jamais entendu parler de Contao et c'est plutôt normal car ce n'est pas un CMS très connu en France. Il a toutefois une bonne réputation en Allemagne - où il a été créé - et en Europe de l'est.

Pour vous faire un résumé : Contao est un CMS gratuit, Open Source basé sur PHP. Jusqu'à la version 3, les développeurs ont maintenus leur propre framework et continuent d'ailleurs d'en assurer les mises à jour de sécurité.

Depuis la version 4, Contao a fait le choix de se reconvertir en surcouche de Symfony 4. L'équipe a conservé la quasi-totalité de la logique propre à Contao tout en profitant de la technologie et de la communauté de Symfony.

En tant que développeur, j'utilise Contao depuis la version 2 et je n'ai encore jamais été bloqué par Contao. Certes, le développement Web tel qu'il existe aujourd'hui est très permissif et peu de systèmes bloquent vraiment les développeurs, mais Contao a l'avantage d'être suffisamment flexible pour tout type de besoin mais de rester exigeant quand il s'agit de respecter les standards établis.

Un Backend tout-en-un

L'une des meilleures idées de Contao a été de gérer la base de données en même temps que les interfaces du Backend.

En effet, tout se résume à des grands tableaux PHP appelés DCA (DataContainer Array) dans lequel on inscrit toute la logique de la table et des colonnes de cette table en même temps que les règles de l'interface. Cette centralisation nous permet de faire évoluer les sites Contao rapidement avec un risque minimal.

Capture d'écran des DCA de Contao
Les DCA de Contao
Capture d'écran de l'interface Contao en back-office
L'interface Contao correspondante

Il existe beaucoup d'options et possibilités pour exécuter la logique nécessaire pour nos applications. Vous pouvez par exemple indiquer l'exécution d'une ou de plusieurs fonctions avant de charger l'interface ou de valider un formulaire. Vous pouvez également modifier la valeur d'un champ avant de le générer, ou l'ajuster à la sauvegarde.

La documentation de Contao détaille toutes ces options pour chaque type de champ. Il est recommandé de l'avoir à portée de clic quand on développe une extension. Toutefois, même si Contao a traduit la documentation, il vaut mieux se fier à la version anglaise, qui est plus souvent mise à jour, comme pour toute documentation informatique.

Les thèmes Backend

Il est également possible de redesigner la totalité du backend de Contao. Même si Contao 4 a fait un bel effort en matière d'ergonomie, ses utilisateurs n'ont pas attendus la version 4 pour proposer des alternatives au design jugé austère de Contao 3.

Cela peut toutefois poser quelques soucis de compatibilité avec des extensions de backend. Rien d'insurmontable car l'utilisateur peut modifier le thème utilisé dans son profil s'il rencontre des difficultés avec un thème externe à Contao.

Visuel du thème de back-office Contao Material
Contao Material
Capture d'écran du back-office avec le thème SB Admin
SB Admin Theme

Le Workflow

Grâce à son système de groupe d'utilisateurs, Contao permet à chaque administrateur de déterminer quel est le rayon d'action de chaque personne amenée à éditer le site. Pour chaque module - natif ou non - vous pouvez autoriser l'administration de tout champ défini dans les DCA évoqués précédemment. Le système de permissions peut être étendu pour répondre à un besoin particulier.

Un versionning des contenus est intégré nativement à Contao, et utilisable par n’importe quelle extension. Chaque version d’un élément est conservée pendant une durée de 15 jours par défaut, avec possibilité de modifier cette valeur dans la configuration du CMS.

Une corbeille est aussi intégrée à Contao, permettant de rétablir tout élément qui aurait été supprimé par inadvertance. La durée de conservation est de 24h, et comme le versionning, cette valeur peut-être modifiée dans la configuration du CMS.

Sont disponibles également depuis le backend, un gestionnaire des données temporaires (cache, images, fichiers compilés), un journal de logs et un explorateur de fichiers. Des essentiels dans la gestion d’un site !

Les extensions

Pour rentrer un peu plus dans la technique, voyons comment se manifeste l’évolutivité du CMS Contao.

Par souci d’actualité, nous allons uniquement parler des possibilités et des bonnes pratiques à appliquer pour Contao 4, et pas spécifiquement pour les versions antérieures, même si elles sont tout aussi importantes.

Faire un module Contao 4 revient globalement à faire un module Contao 3, et optionnellement à l’encapsuler dans un bundle Symfony. Chez Web ex Machina, nous nous contentons de rester en mode Contao, par souci de rétro-compatibilité et car nous ne sommes pas - encore - familiers avec les bundle Symfony (On est plus Team Laravel <3).

Le module type Contao

Dans l’idéal, vous devez disposer du traditionnel combo :

  • Composer
  • GIT/SVN
  • Packagist

Cependant, vous n’avez pas besoin d’outils externe car tout peut se coder dans la partie “system/modules” de Contao. C’est ainsi que fonctionnait les modules de Contao 3 et cela continue de marcher pour assurer la rétrocompatibilité des systèmes existants.

Un module Contao se structure de la façon suivante :

Dossier Descriptif
assets Contient tous les éléments publics de votre module, css, js, icônes, images…
Fichiers : .htaccess
config Contient la configuration de votre module, avec les déclarations de vos tables / modules, ainsi que les chemins vers vos fichiers.
Fichiers : config.php, autoload.php, autoload.ini
dca Contient l’ensemble des tables nécessaires dans votre module
Fichiers : tl_votrenouvelletable.php
languages Contient un ensemble de sous-dossiers et de sous fichiers correspondant à chaque langue disponible dans Contao
Fichiers : fr/tl_votrenouvelletable.xlf
classes / models / modules / templates Dossiers sémantiquement bien nommés pour accueillir vos éléments de front-office. A vous de voir si vous souhaitez conserver cette logique
library Dossier sémantique PSR, pour gérer l’autoload avec Composer. On le nomme library par convention, mais il peut avoir le nom qu’on veut.

Apprendre les rouages d’une extension Contao n’étant pas le but de cet article, nous n’irons pas plus loin et consacrerons un futur article à cela :)

Visuel de la structure d'un module Contao sur Github
Structure d'un module Contao
Capture d'écran de la structure d'un fichier Composer d'un module Contao
Structure d'un fichier Composer d'un module Contao

Le Contao Manager

Depuis la version 4 a fait son apparition le Contao Manager. Comme Symfony requiert une installation via ligne de commande, ce qui n’est pas possible via tous les hébergements, Contao a développé une interface web, capable d’exécuter ses lignes de commandes.

Cette interface permet d'installer et de mettre à jour les extensions et les versions utilisées, avec la syntaxe de Composer.
Grâce à Algolia, vous pouvez rechercher un paquet directement dans toute la base disponible de Packagist, et en lancer l’installation en deux clics.

Visuel des packages sur Contao Manager
Contao Manager - Packages

Vous pouvez également gérer le passage entre l’environnement dev et de prod de Symfony, le cache et le système d’autoload de Composer etc… Toutes les choses qui doivent normalement se faire via une console peuvent se faire via cette interface, qui continue d’évoluer au fur et à mesure.

Le Contao Manager fait également quelques raccourcis utiles au développeur, comme l’accès au back-office, à l’installeur initial de Contao (qui permet de mettre à jour la base de données notamment) et à un phpinfo.

Visuel de la configuration de modules sur Contao Manager
Contao Manager - Configuration
Capture d'écran d'une vérification du système avec Contao Manager
Contao Manager - Vérification du système

Quelques extensions notables Contao

Isotope - Module eCommerce. Intéressant. On doit toutefois ajouter notre propre passerelle de paiement car les banques françaises ne sont pas incluses dans celles disponibles. Mais ce n’est pas un obstacle.

Haste - Ensemble de classes et de fonctions assistant le développement d’extensions pour Contao. Ce module est souvent demandée par les autres extensions.

DcaWizard - Composant Backend permettant d’accéder aux entrées d’une sous-table de l’élément courant.

Table Lookup Wizard - Composant Backend fournissant une sorte d’interface de recherche dans une table disposant d’un très grand nombre d’entrées. Très utile quand les dropdowns + recherche commencent à galérer.

Notification Center - Extension du système d’emails et de notifications en général. Il permet de programmer des emails multilingues, avec un système intelligent et extensible de variables.

Bootstrap fur Contao - Ajoute l’intelligence Bootstrap aux composants natifs de Contao.

Rocksolid Custom Elements - Ajoute la possibilité de créer des nouveaux éléments de contenus administrables et utilisables par les webmasters, quand les éléments natifs ne sont pas adaptables à un besoin précis.

Quelques sites à ressources

Avis personnel

Contao est un CMS efficient et vraiment évolutif. Par vraiment évolutif, j’entends proprement évolutif, et sans avoir à se retrouver avec une usine à gaz à la fin. Comme tout système informatique, le développement et l’intégration d’extensions doit être prévu en amont, afin de pouvoir anticiper un maximum de problématiques, et Contao encadre plutôt bien cette mentalité.

On reproche souvent à Contao d’être très procédurier, et de ne pas faire de raccourcis dans son administration, mais en tant que développeur, on sait que ce que cela implique de couper les virages (l’usine à gaz évoquée précédemment). Il reste possible et envisageable d’étendre ou de retravailler les composants du back-office pour les rendre plus compréhensibles.

OpenSource oblige, parfois, il faut prendre son mal en patience. Il manque des éléments essentiels pour votre projet ou des erreurs surviennent lors d’une mise à jour ? Soit vous les résolvez vous-même (et proposez le fix sur le github de Contao), soit vous trouvez une agence pour le faire à votre place, soit vous déclarez l’erreur et patientez le temps qu’une mise à jour le résolve.
Le Contao Manager a mis du temps à se développer et à exploiter les différents avantages de Symfony mais ça vient tranquillement.

L’allemand n’est pas une langue très accueillante, je sais. La barrière de la langue pose des soucis au début, mais on se débrouille. Chaque extension est traductible, facilement car les extensions sont au moins en anglais et au bout d’un moment, il faut accepter qu’un développeur doit savoir parler anglais.
Il n’y a également pas beaucoup de tutoriels. Cependant, en se basant sur les modules existants et sur les documentations de PHP, la logique de Contao est vite assimilée.

C'est un CMS que je recommande bien évidemment, non seulement à nos clients, mais également à n'importe quel développeur. Contao assimile très bien son rôle de gestionnaire de contenus, en essayant de limiter au minimum ses utilisateurs. Cela permet - une fois maîtrisé - de trouver différentes manières de structurer ses sites, sans pour autant devoir coller des rustines dans tous les sens pour que ça tienne à la fin.

Dans la même catégorie