Table des matières
Joomla! est un CMS (Content management System) open-source développé par Open Source Matters. Son nom est la transcription phonétique d'un mot Swahili signifiant "tous ensemble". Il traduit la volonté affichée par les développeurs de créer un outil qui réponde aux attentes de chacun, permettant de créer des sites web de façon simple et intuitive pour les non-spécialistes, tout en laissant les développeurs libres de développer des fonctionnalités spécifiques à partir de la structure donnée.
Joomla! est le projet qui donne suite à Mambo, un CMS également développé par Open Source Matters. La version 1.0 de Joomla! était en fait la refonte de la version 4.5.2.3 de Mambo, apportant quelques améliorations de gestion des erreurs et de sécurité. Le développement se poursuit actuellement, une version 2.0 est annoncée, sans date précise. Il est à noter que pour la réalisation de cet exposé, la première version utilisée a été la version 1.0.2, car les fichiers téléchargeables sous le nom de version stable 1.0.3 contenaient de nombreuses erreurs, et qu'il a été impossible de les utiliser. La fin de cette étude est réalisée avec la version 1.0.5, deux nouvelles mises à jour apportant des corrections de bugs et de failles de sécurité ayant été rendues disponibles. Cela montre la vitalité du projet et de sa communauté.
Joomla! est développé en php, couplé à une base données mysql. Une configuration classique qui présente l'avantage de pouvoir être mise en oeuvre aisément chez la plupart des hébergeurs, par un simple dépôt des fichiers sur le serveur. Le package est fourni sous la forme d'une archive zip ou tar, qu'il suffit de décompresser sur le serveur. La première connexion au site après cette étape donne accès à une interface de configuration par formulaires qui recueille les informations nécessaires comme les logins et mots de passe de l'administrateur, et le nom de la base de données à créer. Suite à cette phase d'installation, la base de données est créée automatiquement, ainsi qu'un site par défaut, ayant pour sujet principal le CMS Joomla!. Un lien du menu principal permet de s'identifier comme administrateur, et de commencer le développement de la structure souhaitée. La première prise en main est donc extrêmement rapide et aisée, fournissant en quelques minutes un outil de publication opérationnel.
La structure mise en place par Joomla repose en fait sur deux pages principales, servant à l'affichage public du site (index.php), et à l'interface d'administration (index2.php). La séparation entre backend et frontend, entre le site public et l'administration est ainsi très claire, puisque ce sont deux templates totalement différents qui sont appelés.
Ce sont ces deux scripts qui prennent en charge tout l'affichage, les différentes pages étant conditionnées par le passage de variables par l'url, ou par les formulaires, qui définissent le contenu à afficher. L'affichage et l'apparence des pages est défini par un template, qui peut être différent selon les contenus. Ces templates sont principalement composés d'une structure xhtml généré par un script php, et d'une feuille de style css, alliée à un répertoire d'images. Ils sont facilement éditables dans l'interface d'administration, par le biais d'éditeurs wysiwyg pour le php et le css, mais également par le positionnement des modules dans des zones définies dans le template (top, right, left...).
Le contenu proprement dit du site est réparti en sections, qui peuvent elles-mêmes être subdivisées en catégories. C'est ce principe simple qui permet de définir la structuration des documents. Une finesse supplémentaire de gestion est apportée par la possibilité de définir le type d'utilisateur ayant accès au document :- accès public, visible par tout le monde,
- accès aux personnes enregistrées, s'étant identifiée comme membres,
- personnes « spéciales », c'est à dire ayant un statut tel qu'auteur, éditeur, ou administrateur.
La définition de ces droits d 'accès peut se définir au niveau d'un document, aussi bien qu'au niveau d'une section ou d'une catégorie.
-
moteur de recherche
-
définition de metadonnées
-
choix d'éditeurs wysiwyg pour l'ajout de contenu
-
génération de pdf, impression, envoi par mail
-
gestion de différents statuts d'utilisateurs.
-
gestion du cycle de vie d'un document.
-
choix de templates en php/xhtml/css, éditables et modifiables dans l'interface d'administration. Importation possible par upload.
-
installeur de modules externes intégré.
-
nombreux modules préintégrés : forum, blog, sondage, who's there, identification, bannières, moteur de recherche, syncation RSS, ATOM, FAQ, statistiques...
-
compteurs de visites
-
système d'aide intégré
-
possibilité de mettre le site « hors ligne » tout en restant visible.
La base de données de Joomla contient une table nommée « jos_content » dont les champs accueillent toutes les informations relatives à un document. Cette configuration impose que tout contenu soit tapé ou copié-collé directement dans l'interface. Il n'est pas possible (en tout cas sans ajouter de module ou sans développer de fonctionnalité spécifique) d'importer de documents dans un format prédéterminé, comme des feuilles de tableurs, des documents de traitement de texte, ou des documents XML.
Le fait que les contenus soient entièrement stockés dans une seule table contenant 25 champs implique également que l'historique des versions n'est pas conservé. Les changements sont définitifs. On peut savoir quand et par qui un contenu a été modifié pour la dernière fois, mais c'est tout. Aucun retour en arrière n'est possible, et on ne peut pas visionner le cycle de vie du document.
Par défaut, le template ajoute aux contenus des icônes permettant de générer une version pdf, ou d'imprimer.
Les éléments de base d'un contenu sont très simples, rassemblés en tête du formulaire de création : un titre, un titre court pour les menus, une section (liste déroulante), et une catégorie. Viennent ensuite les deux espaces permettant de taper directement le contenu, en mode « wysiwyg ». Le premier correpond au champ « intro_text » de la base de données. Il est destiné à accueillir un texte assez court. Si le deuxième champ texte n'est pas renseigné, il constitue le corps du document. Dans le cas contraire, il sera suivi d'un lien « read_more » qui permettra d'accéder au contenu du champ « full_text ».
Des options supplémentaires sont disponibles par le biais d'onglets. Le nombre de ces options n'est pas le même lorsqu'on crée un contenu en tant qu'administrateur dans le back-office que lorsqu'on le fait par le biais de l'interface publique. Dans tous les cas, il est possible d'associer une image à l'article - et d'en définir les propriétés (position, attribut « alt »...) -, d'agir sur le mode de publication (public destinataire, date de début et de fin de publication...), et de définir des métadonnées, sous la forme de mots-clés saisis dans un champ unique et d'une description de l'article. La création en tant qu'administrateur donne en plus accès aux options liées au contexte d'affichage de l'article, telle que l'icône de génération pdf, l'affichage du titre de section, la présence dun bouton de retour en arrière... Par défaut, ces options sont celles définies pour l'ensemble du site, mais elles peuvent être redéfinies individuellement. L'administrateur a également la possibilité de créer une entrée correspondant à ce document dans un des menus du site.
On peut déduire de cette procédure d'alimentation les trois grandes classes d'information sur les contenus qui sont présents dans la table jos_content : le contenu-même du document, ses métadonnées (auteur, date de modification, mots-clés...), et ses paramètres de publication : icône de pdf, présence du titre de section...
Le contenu textuel des documents est stocké en xhtml directement dans la base. Cela permet une moins grande finesse de gestion et de caractérisation des information que dans un CMS comme Lenya, qui accueille des documents XML permettant un balisage plus sémantique et l'application de traitement xslt des contenus. Néanmoins, le format xhtml a l'avantage d'être très simple à publier et à manipuler.
L'éditeur wysiwyg donne accés à des options de mise en forme classiques , telle que le choix de la graisse, l'italique. Il est également possible de définir l'alignement d'une zone dans la page (centré, justifié, à gauche, à droite). Une liste déroulante permet d'attribuer à une zone sélectionnée un « style » : paragraphe, titres, listes.
Il est possible d'insérer des images distantes en fournisant leur url, et en définissant leur apparence par de options précises de position par rapport au texte, de redimensionnement, ou même de définir une image alternative au passage de la souris.
Il est également possible de définir des ancres nommées, d'insérer des animations flash, de rechercher et de remplacer du texte.
Le contenu entré dans cet éditeur est dynamiquement généré en xhtml. Le code est éditable dans une pop-up, et peut être enrichi directement dans cette fenêtre. Les modifications s'effectuent en temps réel.
Lors de l'enregistrement, c'est ce code xhtml qui est directement enregistré dans les champs « intro_text » et « full_text »de la base de données.
Un document correspond donc à une entrée de la table « jos_content », dont les informations sont traitées par les scripts php, et intégrées au templates.
Cette table comprend 25 champs :
-
id : la clé primaire de l'article
-
title : son titre
-
title_alias : un titre court placé dans les menus
-
intro_text : le texte principal de l'article. Il est stocké dans un champ de type text, et comprend l'ensemble du code html.
-
full_text : comme intro_text, ce champ comprend du contenu balisé en html, qui correspond au contenu entré dans le formulaire "main text".
-
state : définit si le contenu est publié (valeur=1) ou non (0)
-
section_id : la référence à la clé de la section dont fait partie l'article
-
mask : définit si le contenu est masqué
-
catid : la référence à la catégorie dans laquelle est placé l'article
-
created : un champ de type date, qui contient la date et l'heure de création du contenu
-
created_by : contient l'id de l'utilisateur qui a créé le contenu
-
created_by_alias : l'alias de l'utilisateur qui a créé le contenu
-
modified : la date et l'heure de dernière modification de l'article
-
modified_by : l'id de l'utilisateur qui a effectué la dernière modification
-
publish_up : la date de début de publication
-
publish_down : la date de fin de publication
-
images : la liste des adresses relatives des images éventuellement associées à l'article
-
publish_down : la date de fin de publication
-
urls : ce champ n'est pas utilisé pour l'instant
-
publish_down : la date de fin de publication
-
attribs : dans ce champ sont stockées toutes les options de publication, avec des valeurs booléennes représentées par 1 ou 0. Il s'agit de définir si le titre doit être apparent, les images, s'il doit y avoir un bouton de retour en arrière, si on doit indiquer le nom de la section, de la catégorie, si on doit proposer une impression ou une édition pdf...par défaut, ces valeurs correspondent aux choix effectués pour l'ensemble des contenus et intégrés dans les paramètres des templates.
-
version : contient le numero de version (donc le nombre de fois que le document a été modifié +1)
-
parent_id: contient éventuellement l'id d'un contenu que le créateur a jugé pertinent de lier.
-
ordering : le numéro d'ordre du contenu dans sa catégorie
-
metakey : la liste des mots clés de l'article. Lors de l'affichage, ceux-ci sont intégrés à la balise des métadonnées de l'index, qui ne contiennent par défaut que le terme "joomla".
-
Metadesc : la description de l'article
-
access : définit le type d'utilisateur qui a accès au contenu, avec 3 valeurs possibles : 0 pour un accès public, 1 pour un accès réservé aux utilisateurs identifiés, et 2 pour un accès réservé aux utilisateurs "spéciaux".
-
hits : le nombre de consultations de l'article.
Deux champs de métadonnées sont présents dans la base, metakey et metadesc, et utilisés pour la caractérisation sémantique du contenu. Le premier accueille une liste de mots-clés entrés dans un champ texte unique, séparés par des espaces. Le second accueille une description. Ces deux champs sont utilisés par le moteur de recherche comme des champs d'indexation. Seul le champ de mots-clés est inséré dans les balises méta de la page xhtml générée par le template lors de la publication.
Les autres champs de métadonnées, comme l'auteur ou la date de publication peuvent être affichés avec le contenu, mais n'apparaissent pas forcément. Leur valeur d'index est alors limitée au moteur de recherche interne. D'autres outils ont fait des choix différents, Comme Plone qui fait apparaître ce type d'information dans des balises Dublin Core dans l'entête des pages, ce qui permet qu'elles soient accessibles par les moteurs de recherche.
Le moteur de recherche interne effectue également une recherche plein texte sur les documents, et propose ensuite une recherche sur les mêmes termes avec Google.
La classification des documents dans Joomla! Suit un principe extrêmement simple : il est possible de définir des sections, qui doivent accueillir des catégories renfermant les documents. La création de sous-catégories n'est pas possible nativement.
Cette structure a l'avantage d'être extrêmement facile à mettre en oeuvre et à comprendre du côté de l'utilisateur. Cependant, elle souffre d'un manque de souplesse évident et ne pourrait suffire à une gestion documentaire complexe, ou à de grosses masses de documents.
Chaque contenu comporte dans ses informations une date de publication et une date de fin de publication. Par défaut, la date de publication est la date de création de l'article et la date de fin a la valeur « never », mais ces valeurs peuvent être modifiées. A l'intérieur de ces bornes, le champ state est fixé à 1 (publié), en dehors, l'article n'est pas publié mais reste présent dans la base de données et reste visible par les administrateurs, et les éditeurs. La procédure d'archivage des documents est prévue de façon très sommaire, puisqu'il s'agit de déplacer l'enregistrement dans une catégorie archives, qui ne se différencie en rien de la « corbeille ». Ainsi, les documents peuvent passer par deux étapes avant d'être supprimés ou oubliés, mais une réelle gestion est difficile : les articles archivés sont tous placés au même niveau, une grande masse de documents devient vite peu claire.
Les contenus créés dans l'interface publique par de simples utilisateurs sont créés sans être publiés, jusqu'à ce qu'un administrateur change le contenu de statut poue le publier. A partir de ce moment, le contenu est susceptible d'être modifié par son auteur ou une personne supérieure dans la hiérarchie des rôles, sans qu'aucune validation ne soit nécessaire.
La création d'une véritable gestion des différentes versions d'un contenu est en prévision, mais n'est pas encore opérationnelle.
La gestion de contenu prévue dans Joomla! est extrêmement simple. C'est à la fois un atout et un défaut. Cela permet un déploiement et un développement extrêmement rapide de contenus simples, par rapport à des outils plus complexes comme Plone ou Lenya. Cependant, cela restreint également les possibilités de l'outil, qui ne permet qu'une structuration très grossière, et ne donne aucune prise sur les processus d'évolution des contenus.
Les utilisateurs de Joomla sont répartis en trois goupes : guest, frontend et backend, selon la partie de l'application à laquelle ils ont accès. Le groupe frontend n'a accès qu'à l'interface publique du site, tandis que le groupe backend a accès au backoffice, avec l'interface d'administration. Plusieurs rôles sont définis au sein de chacun de ces groupes, qui conditionnent les pouvoirs de l'utilisateurs.
Les documents publiés peuvent avoir trois statuts qui définissent le public susceptible de les consulter : public (accessible à tout le monde), registered (réservé aux personnes identifiées), et special (réservé aux personnes ayant un statut supérieur à registered).
Le profil « guest » est attribué par défaut aux personnes ne s'étant pas identifiées. Ces utilisateurs n'ont aucun autre droit que de voir les documents publiés avec le statut « public ».
-
Registered : c'est le premier niveau d'utilisateur, qui comporte le moins de droits. Il est possible d'acquérir ce statut en passant par l'interface publique, en fournissant un nom, un pseudo et une adresse mail. L'utilisateur est alors créé dans la base, mais sans être autorisé à faire quoi que ce soit. Un mail est envoyé à l'adresse indiquée, et ce n'est qu'après validation par le lien envoyé que l'utilisateur est réellement actif. Un utilisateur « registered » n'a aucun de droit de publication, il peut juste visionner les contenus qui lui sont autorisés, c'est à dire ceux enregistrés avec le statut public ou registered.
-
Author : Les auteurs font partie des utilisateurs spéciaux. Ce statut ne peut être attribué à un utilisateur que par l'interface d'administration. Les auteurs peuvent soumettre de nouveaux contenus, par le biais d'un éditeur wysiwyg intégré à l'interface publique. Ces contenus ne seront publiés que lorsqu'un administrateur les aura validés. Un auteur peut à tout moment mettre à jour les contenus dont il est l'auteur, ces modifications sont publiées en direct.
-
Editor : Les éditeurs font partie des utilisateurs spéciaux. Ce statut ne peut être attribué à un utilisateur que par l'interface d'administration. Les éditeurs ont les mêmes droits que les auteurs, mais ils peuvent en plus modifier les contenus dont ils ne sont pas auteurs. Ils ont accès à tous les contenus, même ceux qui n'ont pas encore été validés.
-
Publisher : Ils semblent avoir pour l'instant les mêmes droits que les éditeurs.
Les utilisateurs faisant partie du groupe backend ont les mêmes droits dans l'interface publique que les éditeurs. Ils peuvent soumettre des contenus, effectuer des mises à jour, avoir accès à tous les documents. Il ont en plus accès au backoffice. Trois rôles sont définis dans ce groupe :
-
Manager : Le manager a accès à un backoffice limité, lui permettant d'agir sur les sections et les catégories de contenus, et sur le contenu de la page d'accueil. Il a accès à tous les éléments de contenu, et peut donc valider les contenus en attente.
-
Administrator : Il a les mêmes pouvoirs que le manager, mais peut en plus accéder au trash manager (éléments mis à la corbeille), gérer les menus, et gérer les utilisateurs (en créer de nouveaux, en supprimer, leur donner des droits)
-
Super-administrator : il a tous les droits. C'est à dire qu'il a accès à la configuration globale du site, peut importer des modules, décider des templates, etc. Il reçoit des messages privés à la création de tout nouveau contenu, afin de pouvoir les valider.
Ici encore, la philosophie développée par Joomla! est extrêment simple. La plupart des CMS permettent au moins de définir des groupes d'utilisateurs. Ici, tous les rôles sont prédéfinis nativement, et peu paramétrables. Cela confirme que Joomla! est plus approprié pour créer des sites communautaires simples, ou des portails, que pour mettre en oeuvre des travaux documentaires d'ampleur, demandant un workflow élaboré. Aucune fonctionnalité fine de gestion des processus de travail n'est proposée, aucune gestion des tâches et des étapes de publication, ni des versions.
L'archivage et l'exportation du CMS complet font partie des rares actions qui ne soient pas prévues dans les interfaces d'utilisation. Cependant, la conception de l'outil rend ces tâches relativement aisées. On peut séparer trois types d'éléments à prendre en compte pour conserver une copie d'un site à un instant donné:
-
la base de données : on peut en créer une copie, ou une image textuelle aisément, comme toute base de données mySQL
-
les fichiers importés : les images importées sur le serveur, ou les animations flash, doivent être également conservées.
-
les templates et les modules : ils sont contenus dans deux dossiers.
Normalement,la souvagarde de ces éléments suffit à garantir une sauvegarde du site dans son état, à moins que des modifications des fichiers de base de Joomla! aient été effectuées.
Lors d'un déplacement, il suffit de réinstaller une nouvelle version de Joomla sur le serveur, d'y placer ces éléments et de remplacer la base de données vierge par l'ancienne. La compatibilité des différentes versions, qui évoluent très vite, est assurée par la mise à disposition de « patchs » permettant de passer d'une version à la suivante, depuis la version 1.0.
La communauté de Joomla! est extrêmement active, ce qui donne lieu à une grande variété de développements qui facilitent grandement la customisation. De nombreux templates sont disponibles sur le web, prévoyant les mêmes zones de publication de modules. On peut ainsi appliquer à tout moment une nouvelle présentation au site, en entrant dans le formulaire d'importation de templates l'adresse du package en question. Un module proposé dans la version de base permet d'inclure aux templates un module permettant à l'utilisateur de choisir parmi les différents templates disponibles.
L'ajout de fonctionnalités peut se faire de la même manière, un nombre impressionnant de modules ayant été développés, proposant des fonctionnalités d'une diversité impressionnante[1].
Au-délà de ces importations simplifiées, les templates sont divisés en zones pouvant accueillir des modules, faciles à répartir dans l'interface d'administration, en leur attribuant une zone, et un ordre dans cette zone.
Par ailleurs, des éditeurs intégrés permettent de modifier les scripts php et css des templates directement dans l'interface.
La customisation d'un site réalisé avec Joomla! est donc extrêmement simple.
Les concepteurs de Joomla! ont fait un choix clair : privilégier la facilité d'utilisation, et la convivialité des interfaces, au lieu de proposer des fonctionnalités de management et de gestion de contenu extrêmement élaborées.
C'est un outil de publication web puissant et efficace, qui propose de nombreux modules, des facilités de customisation, et d'administration. Ses éditeurs wysiwyg sont très performants.
Cependant, la gestion de contenu qu'annonce le terme de CMS reste très limitée par rapport à des outils plus lourds, proposant la constitution d'un réel workflow, avec une administration poussée des groupes et des utilisateurs, de leurs droits et des procédures de gestion et de contrôle des contenus. On doit ici se contenter d'une formule prédéfinie, avec une structuration des documents et une gestion des utilisateurs très simples.
De par ces choix, Joomla! est un outil très léger et maniable, facilement appréhendable et rapide à déployer. Cependant, il ne peut en aucun cas satisfaire aux exigences d'un projet demandant une réelle gestion de contenu, ou un contrôle de flux d'information et de documents importants.
La communauté très active qui l'entoure, et le fait qu'il donne suite à Mambo, un projet reconnu et pérenne, est un de ses atouts majeurs.
[1] Quelques exemples : http://www.joomlaresource.com