Note: cet article n'est pas une introduction à l'utilisation de Joomla. C'est mon retour d'expérience de plusieurs années de développement et d'intégration avec ce CMS.

Joomla! est un système de gestion de contenu (CMS), développé par des passionné(e)s dans le monde entier, qui se veut à la fois simple pour les débutants et suffisamment flexible et performant pour les développeurs plus expérimentés. Bien entendu, ce CMS, qui existe depuis plus de 10 ans, a ses limitations et les lourdeurs que l'on peut attendre d'un projet communautaire à l'échelle mondiale. Mais tout en reconnaissant qu'aucun logiciel n'est parfait, Joomla! permet de développer un site dynamique, sécurisé et multilingue avec un budget raisonnable et des technologies éprouvées.

De plus, c'est un logiciel qui n'est pas lié aux intérêts d'une entreprise, mais qui est juridiquement sous la houlette d'une association (Open Source Matters). Cette structure juridique sans buts lucratifs favorise à long terme l'intérêt des utilisateurs, plutôt que la recherche de profits immédiats par les concepteurs du logiciel. C'est un critère important dans la recherche d'une solution technique durable aussi bien pour des PME, que des organisations gouvernementales ou des associations.

Programmer sans toucher au coeur de l'application

Joomla est une application open source complexe qui est régulièrement améliorée. Il est donc important de ne pas altérer son coeur pour pouvoir la mettre à jour facilement dès qu'une nouvelle version est annoncée. La bonne nouvelle, c'est qu'il existe de nombreux moyens de surcharger ou surclasser le code source existant et de créer ses propres extensions.

Les composants (applications routant leurs propres URL comme le gestionnaire de contenu) et les modules (widgets d'affichage) de Joomla se conforment au modèle de programmation MVC (Model-view-controller). L'utilisateur a la possibilité de substituer le code HTML/PHP de chaque vue en l'ajoutant dans un dossier nommé HTML à l'intérieur du dossier template et même de créer de nouvelles vues. L'interface d'administration permet de générer rapidement ces surcharges (overrides) d'un clic dans le gestionnaire de templates. D'autres éléments d'interface, appelés Affichages (layouts), peuvent être substitués de la même manière. Ces fichiers peuvent être personnalisés et ne seront pas écrasés lors de la prochaine mise à jour (ne pas oublier de les synchroniser de temps en temps).

 Gestion des templates

Lorsque ces techniques ne font pas l'affaire, il est possible de programmer un troisième type d'extension, un plugin, qui modifie le fonctionnement global de l'application. Par exemple, un plugin peut ajouter un nouveau champ de données au gestionnaire d'articles, intégrer des meta-données ou des micro-données à la volée dans le code HTML, crypter les adresses emails ou transformer des shortcodes en divers éléments d'interface plus complexes comme des diaporamas.

Modifier le template en fonction des pages et des catégories

Les sélecteurs CSS peuvent être injectés à différents niveaux pour modifier l'apparence du site: directement dans le fichier principal index.php du template, mais aussi à l'intérieur d'un module et à l'extérieur (module chrome). Les modules sont activés ou désactivés à volonté dans chaque page ou catégorie assignée à un élément de menu. C'est pratique, car les modules peuvent charger leurs propres feuilles de style ou scripts Javascript, ce qui permet un contrôle très fin sur ce qui est chargé et à quel moment.

Le gestionnaire de menu de Joomla permet aussi d'ajouter des sélecteurs CSS pour créer des règles spécifiques à une page particulière ou de choisir un style de template. Un fichier XML est utilisé pour configurer les styles de template comme pour tous les autres types d'extensions de Joomla. Il est, par exemple, possible de créer le bouton de sélection d'un logo, d'un code de couleur ou d'un simple champ texte sans devoir programmer l'interface. De plus, Joomla est livré avec les fichiers LESS du framework Bootstrap (en version 2 pour l'instant), ce qui permet de tailler sur mesure l'interface responsive du template par défaut Protostar. La flexibilité est vraiment le maître mot de ce CMS.

Créer ses propres extensions

Ok, l'interface de programmation orientée objet de Joomla est complexe et peut être confuse en raison de la présence de code legacy (lié à d'anciennes versions) et de la nécesite de naviguer dans la hiérarchie des classes. La documentation, en net progrès dans sa version anglophone, n'est pas exhaustive. Mais la structure et l'organisation des fichiers sont éprouvés. Pour gagner du temps, il est possible de créer le squelette de l'extension que l'on veut développer avec Component creator. En effet, réaliser la structure MVC multilingue d'une extension et son paramétrage à l'aide de fichiers xml et ini est l'aspect le plus rébarbatif du développement sur Joomla. Mieux vaut automatiser ce qui peut l'être. Examiner le code source d'une extension installée par défaut par le CMS peut être un bon point de départ. De plus, le JED (Joomla extensions directory) propose des milliers d'extensions gratuites ou payante qui peuvent être téléchargées et installées directement depuis l'interface d'administration du CMS. Mais attention, la qualité de leur code source et leur compatibilité avec les versions les plus récentes de Joomla ou les bonnes pratiques du CMS sont très variables. Certains développeurs comme Akeeba ou RSJoomla sont néanmoins à recommander.

La sécurité

La sécurité d'un CMS sur un serveur est un sujet à part entière. Néanmoins, en suivant les conseils précédents, on aura compris que mettre à jour l'application et ses extensions permettra déjà d'améliorer considérablement la sécurité de son site.

Joomla est un CMS considéré "out of the box" comme sûr. Il est en plus livré avec deux plugins indispensables pour améliorer la sécurité de son site: Google reCaptcha filtre l'accès des robots aux formulaires et Google Authenticator protège l'accès à l'interface d'administration par un code secret modifié toutes les 30 secondes. La classe JForm permet de créer facilement des formulaires sécurisés à l'aide des règles de sécurité de l'API Joomla en définissant les champs à utiliser dans un fichier XML. De nombreuses règles de sécurité supplémentaires peuvent être incluses dans le fichier htaccess du serveur Apache pour bloquer les attaques. En cas de doute pour sécuriser son site, il vaut mieux installer une extension comme Aesecure ou Akeeba Admin Tools (version payante) qui va créer le fichier htaccess pour vous et offrir des services de protection, d'audit et d'alerte supplémentaires.