Drupal & WordPress

#cms#drupal#outil#wordpress

Dans le milieu du développement de sites internet et d’applications Web, les logiciels de gestion de contenu sont de plus en plus répandus. Nous proposons une présentation sur fond de comparatif de deux d’entre eux : Drupal et WordPress.

L’architecture

Drupal

Drupal est un logiciel Open Source de gestion de contenu (CMS : Content Management System). Il permet de gérer la rédaction et la publication de contenu. Ce logiciel libre est écrit en PHP.

Drupal est un CMS dit modulaire. En effet, son architecture est organisée en modules qui interagissent entre eux et avec le noyau du logiciel. Ce noyau du logiciel n’embarque qu’un minimum de fonctions nécessaires à l’établissement de la communication entre les différents modules et pour remplir certains services de base. Chaque module représente généralement une fonctionnalité de l’application. Lorsqu’un internaute tente d’accéder à une partie du site, le noyau de Drupal intercepte la requête, établit la liste des modules nécessaires, puis les instancie. Une fois les modules instanciés, ils communiquent entre eux via des appels de fonction afin de construire la page HTML en réponse à la requête de l’internaute. Lorsque tous les modules ont intégré les éléments qu’ils devaient placer sur la page, ceux-ci sont désactivés par le noyau de Drupal, déchargés de la mémoire, et la page est envoyée au navigateur de l’internaute.


Architecture de Drupal

Un module est un ensemble de fonctions PHP respectant une convention de nommage, ce qui permet au noyau de Drupal de manipuler ces fonctions. L’idée repose sur le principe qu’une page HTML est le résultat de l’assemblage de tous les éléments qui la composent. Ainsi, lorsque le noyau de Drupal charge un certain nombre de modules afin de générer une page, il appelle pour chaque élément de la page chaque module. Si le module contient une fonction dont le nom, grâce à la convention de nommage, correspond au contenu de l’élément en question, le module génère du contenu et celui-ci est ajouté sur la page HTML.


Flux dans Drupal

Drupal est un logiciel fortement lié avec sa base de données. Toutes les informations contenues sur la ou les applications qu’il supporte sont stockées dans la base de données.

Ces informations, qu’elles soient des articles, des brèves, des informations diverses, des formulaires ou encore des images, sont représentées par des nœuds. Un nœud est une entité de stockage non différencié qui contient le minimum d’informations. Chaque nœud est rattaché au type de ressources auquel il correspond ainsi qu’a toutes les informations le concernant. Chaque nœud, selon son type, possède différents champs qui lui permettent de conserver les données qui le concernent sans le surcharger.

Le contenu est ainsi dissocié de la mise en page. La conception graphique du site passe par des gabarits, Drupal permettant d’utiliser différents moteurs de gabarits. Les éléments de la page HTML sont organisés en blocs afin de faciliter leur disposition dans l’affichage.

WordPress

WordPress est un gestionnaire de contenu « classique », développé à la base en 2003 à partir du moteur de blog « b2 ». Celui-ci a ensuite évolué pour devenir un gestionnaire de contenu. L’outil permet la rédaction et la publication de contenu sur une architecture Web. Il est écrit en PHP et est Open Source. Initialement destiné aux blogs, il a intégré de nouvelles fonctionnalités lui permettant de gérer aujourd’hui n’importe quel type de site Web.

WordPress se concentre autour d’une application principale regroupant les grandes fonctionnalités de la gestion de contenu Web. Cette application intègre directement ces fonctionnalités grâce aux fichiers PHP qui la constituent. Il est ainsi possible de créer certains types de contenus qui sont stockés dans la base de données du site.

WordPress permet aux développeurs d’utiliser des plugins afin d’ajouter des fonctionnalités aux sites. Ces plugins, développés par la communauté et nombreux, permettent de couvrir la plupart des fonctionnalités attendues. Si le développeur ne trouve pas de plugin satisfaisant, il peut en développer lui-même. En effet, un plugin est constitué d’un ou plusieurs fichiers écrits en PHP et offre des fonctionnalités supplémentaires à celles proposées.

Le code d’un plugin est organisé en fonctions et contient des éléments clés, comme un header, pour pouvoir être reconnu par WordPress. Le plugin peut intervenir à différents niveaux sur le site, dans la réception des requêtes HTML, dans le traitement des données envoyées par les utilisateurs ou dans la mise en page du contenu. Les plugins sont stockés dans l’arborescence du site dans un dossier spécifique et sont donc facilement manipulables.

La base de données d’un site fonctionnant sous WordPress ne contient que le contenu diffusé sur le site. Le contenu du site et l’affichage de celui-ci ne sont pas liés, car WordPress utilise un système de gabarits pour faire la mise en page de son contenu. Les gabarits étant personnalisables en HTML et CSS, le développeur est libre de présenter son site comme il veut.

Les fonctionnalités

Drupal

L’installation de Drupal est simple. Une fois les fichiers source téléchargés, il suffit de créer une base de données et de lancer le script d’installation. En quelques clics, l’application Web est prête à être utilisée.

Les fonctionnalités disponibles de base avec Drupal regroupent la plupart des fonctionnalités classiques d’un gestionnaire de contenu. L’interface d’administration permet entre autres de créer, publier et gérer du contenu ou des pages statiques, habituellement dédiées aux informations générales. Ce contenu peut être organisé grâce à des mots clés. Les utilisateurs de l’application peuvent consulter le contenu et le commenter.

Certaines fonctionnalités sont désactivées par défaut, comme l’interprétation de code PHP dans certains contenus, ou la gestion de sondages proposés aux utilisateurs. Pour toutes les fonctionnalités, Drupal dispose d’une interface de gestion des droits d’accès précise et adaptable aux besoins du développeur.

Cependant, grâce à son architecture modulaire, Drupal est finement paramétrable. Le développeur peut ainsi choisir pour chaque module s’il sera activé ou non et configurer celui-ci. Ainsi, il est par exemple possible de désactiver les commentaires ou de configurer une zone de lecture de flux RSS venant d’un autre site.


Drupal : panneau de gestion des modules

Drupal offre de nombreuses fonctionnalités de base au développeur. Ce dernier peut créer de nouveaux types de contenus, gérer ces contenus ou encore administrer les utilisateurs et les autorisations d’accès aux différentes fonctionnalités du site. La gestion des droits d’accès est à la fois simple et complète, l’administrateur du site pouvant facilement ajouter ou supprimer un rôle, les restrictions dépendant des rôles couvrant l’ensemble du site.

Pour la gestion des contenus, Drupal utilise le concept de taxonomie qui correspond à un système de classification très flexible. En effet, le développeur peut choisir les références et catégories qu’il faut renseigner à la rédaction de chaque type de contenu. Le module Taxonomy qui gère cette classification propose également des outils de recherche basés sur ces critères. Pour des outils plus puissants, le module Search, dédié à la recherche permet de faire des recherches sur l’ensemble du contenu du site.

Afin d’offrir de bonnes performances, Drupal intègre un système de cache standard permettant au développeur de choisir les éléments du site ou de l’application qui doivent être mis en cache, et pour combien de temps. Le développeur peut aussi mettre l’application en mode ‘Maintenance’ permettant ainsi de faire les mises à jour et les évolutions. Des fonctions du tableau d’administration lui indiquent quels modules comportent des erreurs et quels sont les bugs présents (liens morts, conflits de droits d’accès, …).

Plus généralement, l’interface d’administration est très complète et paramétrable par l’administrateur lui-même. Elle permet la gestion du contenu, des utilisateurs et de l’apparence du site. Elle permet également de gérer et de configurer les modules disponibles, d’organiser la structure et propose un tableau de surveillance.


Drupal : panneau de configuration du site ou de l’application

Drupal offre donc de base de nombreuses possibilités pour la réalisation d’une application Web, mais ses fonctionnalités peuvent être encore étendues ou remplacées grâce à l’ajout de modules. Tout développeur peut soit programmer son propre module, soit intégrer des modules développés par les membres de la communauté Drupal. L’intégration des modules est simple et se fait via l’interface d’administration. Par ailleurs, des modules Migration et WordPress Migration permettent d’intégrer du contenu venant d’un autre site fonctionnant avec d’autres moteurs de blogs.

Des modules permettent d’enrichir la rédaction de contenu, comme le module CCK, ou de gérer le multilinguisme. Le catalogue de modules utilisable par Drupal est riche et en constante évolution grâce à la communauté.

La conception d’une application avec Drupal se base sur deux éléments, la structure du site configurable via l’interface d’administration et le thème utilisé pour le rendu. La structure correspond aux blocs disponibles (entête, pied de page, colonnes…) auxquels sont attachés les différents contenus du site. Le thème utilisé contient l’affichage de ces blocs, leur graphisme et les fichiers CSS utilisés dans l’application.

WordPress

L’installation de WordPress ne prend que quelques minutes. Il faut placer les fichiers source à l’endroit choisi sur le serveur Web, créer une base de données, et le script d’installation se charge du reste.

Une fois l’installation effectuée, l’application est directement accessible, le développeur peut générer du contenu et le gérer. De base, il est possible de rédiger des articles et des pages, plutôt dédiées aux informations statiques. Les articles peuvent être rattachés à des catégories et des mots clés, et le gestionnaire de commentaires permet aux internautes de réagir sur ces articles.


WordPress : interface d’administration

Les fonctionnalités de base intègrent également un moteur de recherche sur le contenu du site et un gestionnaire de ‘Widgets’, sortes de petits plugins destinés à l’habillage du site, ces derniers pouvant être paramétrés et positionnés dans la structure de l’application. Il est aussi possible de récupérer des flux RSS et de les afficher. De plus WordPress génère automatiquement un flux RSS du contenu publié sur son propre site.

En plus des fonctionnalités de base, WordPress propose un système d’extensions, sous forme de plugins additionnels, apportant des fonctionnalités supplémentaires. Le développeur peut aller chercher ces extensions sur le portail officiel de WordPress ou développer lui-même ses propres plugins. Les extensions disponibles sur Internet sont nombreuses et régulièrement mises à jour par la communauté WordPress.

L’extension Exec-PHP, par exemple, permet d’interpréter du code PHP inséré dans un contenu. Autre exemple, l’extension TinyMCE enrichit l’éditeur de texte de WordPress pour la rédaction du contenu. Pour chacune de ces extensions, il est possible de spécifier quel utilisateur ou quel type d’utilisateur peut avoir accès à ces fonctionnalités.

Grâce à l’extension Easy Post Type ou Custom Post Type UI, le développeur peut définir de nouveaux types de contenus, proposant ainsi à l’utilisateur une plus grande diversité de contenus. Ces extensions permettent de paramétrer les champs qui sont disponibles lors de la rédaction d’un certain type de contenu. Toujours en ce qui concerne les contenus publiés, certaines extensions proposent de gérer la traduction de ces contenus. Par exemple, l’extension WPML utilise des fichiers ‘.mo’ pour assurer les traductions et autorise le développeur, entre autres choses, à choisir quels sont les champs à traduire.

Pour organiser, classifier et référencer le contenu, WordPress propose de base des mots clés ou tags. Ces tags sont hiérarchisables et permettent aussi au développeur de donner de la profondeur dans son organisation. Un contenu peut de plus être rattaché à autant de tags que souhaité. En combinant ces tags avec des extensions de gestion de mots clés ou de référencement, comme Google XML Sitemap ou Simple Tags qui propose un nuage de mots clés, il est possible d’optimiser le référencement et le positionnement de son application dans les moteurs de recherche.

WordPress dispose d’un système de gestion du cache standard qui garde en mémoire, au format HTML, les pages affichées par les utilisateurs. Lorsqu’un autre visiteur demande la même page, le serveur lui renvoie la page du cache. Le cache de WordPress est un cache non persistant, à savoir qu’il ne conserve les pages que 15 minutes. Il est donc efficace pour les sites à haute fréquentation mais peut s’avérer gênant pour d’autres applications moins sollicitées. Il existe des extensions pour surcharger cette gestion du cache. Par exemple, le plugin WP Super Cache reprend la technique de base mais de façon plus optimisée, alors que le plugin DB Cache Reloaded ne stocke pas les pages HTML mais les requêtes entre WordPress et la base de données. Autre exemple, l’extension W3 Total Cache intègre dans une même extension les principes utilisés par WP Super Cache et DB Cache Reloaded. Le développeur peut selon ses besoins utiliser l’une ou l’autre des extensions ou en combiner plusieurs pour gagner en performance.


WordPress : interface de gestion des extensions

L’interface d’administration de WordPress est complète et permet au développeur d’avoir une vue d’ensemble de son application. Des extensions peuvent être mises en place pour modifier et paramétrer de façon plus fine cette interface.

Comme pour la majorité des CMS, la conception de l’interface d’une application fonctionnant avec WordPress utilise un système de templates pour gérer l’affichage du contenu. Le contenu, stocké dans la base de données, n’est pas lié à la mise en page. Ce sont les fichiers du template, comprenant les feuilles de styles CSS et l’organisation du site, qui sont appliqués à chaque affichage. WordPress intègre de base un éditeur de thèmes qui permet de modifier le style des templates.

Le développement

Que ce soit avec Drupal ou avec WordPress, il est possible de faire du développement spécifique, soit pour ajouter des fonctionnalités, soit pour interfacer le site avec d’autres applications. La logique mise en place pour l’architecture des modules ou des extensions est semblable mais la syntaxe est néanmoins différente entre les deux solutions.

En effet, avec Drupal, un module s’organise en « hook ». Les hook sont des fonctions à l’intérieur des modules, qui suivent une syntaxe précise. Ces hook permettent à Drupal de manipuler le module, et de le faire interagir avec les autres. Le nom de ces fonctions de hook commence toujours par le nom du module et finit par le nom du hook. Le développeur peut également placer des fonctions PHP classiques qui sont privées (réservées au module). Les fonctions hook du module sont appelées par Drupal lors de la génération de pages. Par exemple, lorsque l’administrateur accède à une page du menu d’administration, Drupal appelle chaque module pour savoir s’il contient une fonction hook pour ce menu, et construit la page avec les retours de ces fonctions.

Voici un exemple de fonction hook pour générer le menu d’un module (module_test) :

Avec WordPress, le développement d’un plugin utilise également le principe des hooks. Cependant, les hooks de WordPress correspondent à quelques fonctions du cœur, le reste du code subit moins de contraintes. Le développeur a à sa disposition plusieurs API regroupant un ensemble de fonctionnalités utilisables dans son plugin. Il peut aussi coder le plugin comme un traitement PHP classique, hormis pour les fonctions du cœur. Un plugin WordPress est donc un ensemble de traitements et de génération de contenu raccordé à WordPress grâce aux fonctions spécifiques. Il existe également deux fonctions permettant d’appeler une fonction du module lors de son activation et de sa désactivation.

Voici un exemple de fonction gérant le menu d’administration de l’extension :

 

Conclusion

Drupal et WordPress permettent tous deux de gérer du contenu sur une ou plusieurs applications en même temps et de récupérer ce contenu de diverses sources (Blogs, RSS). Ils peuvent s’interfacer avec d’autres applications Web via des modules ou des extensions. L’un comme l’autre possèdent une communauté dynamique à la fois francophone et anglophone, ce qui leur permet de rester à jour et de proposer régulièrement des évolutions. Tous deux disposent enfin d’outils pour s’adapter aux interfaces mobiles, ce qui devient de plus en plus indispensable.

Toutefois, ils ont leurs avantages et inconvénients respectifs. Drupal, grâce à son architecture modulaire offre au développeur des possibilités de paramétrage plus précises. Le concept de taxonomie intégré dans Drupal permet de marquer le contenu, de le catégoriser et de le classifier. Par contre, son architecture modulaire peut faire de ce gestionnaire de contenu un outil gourmant en ressources. Beaucoup d’accès à la base de données peuvent gêner le fonctionnement des sites volumineux. Toutefois, ce point négatif peut être corrigé grâce au système de cache.

Pour ce qui est de WordPress, il est simple à prendre en main, son tableau de bord est très intuitif et donne une bonne vision d’ensemble du site. Cependant, c’est à l’origine un moteur de blogs, et l’outil est donc plus abouti dans ce type d’applications. Mais les nombreuses extensions disponibles complètent largement ses fonctionnalités de base et en font désormais un gestionnaire de contenu à part entière.