Drupal (prononcé à l'anglaise ) est un système de gestion de contenu (CMS) libre et open source publié sous la licence publique générale GNU et écrit en PHP. Il permet la création et l'entretien de sites Web de manière plus rapide et plus efficace que la mise en œuvre d'une arborescence de pages HTML/CSS classique.

Historique Conçu en 2000 à l'université d'Anvers par Dries Buytaert comme un forum (message board) entre amis, Drupal évolue vers un « assembleur rapide de site web » (). Son code est ouvert depuis 2001..

Le nom Drupal est une traduction anglaise du mot néerlandais druppel, qui signifie “goutte”. L'idée est sans doute liée à l'existence d'un site Drop.org, aujourd'hui disparu, que Dries Buytaert avait voulu appeler “dorp” (mot néerlandais signifiant "village") en raison de son but communautaire. L'histoire veut que Dries Buytaert ait fait une erreur de frappe lors de la vérification du nom de domaine et ait pensé que l'erreur sonnait mieux.

En , Drupal est classé du concours organisé par la société britannique Packt dans la catégorie Best Open Source PHP CMS, devant WordPress et Joomla!. Il fait également son entrée en première position dans le Hall of Fame Award nouvellement créé, suivi par Joomla!Liste des gagnants depuis 2006 sur le site de Packt.

En , sites l'utilisent..

En , Angela Byron annonce"Drupal also now powers over 1 % of the web, including the websites of household names such as whitehouse.gov and grammy.com", Drupal 7 Module Development, , préface. que Drupal équipe à peu près 1 % des sites Internet mondiaux.

En , la société Acquia (dédiée à Drupal et créée par son fondateur) lève 50 millions de dollars auprès de (NEA) et ..

En , Drupal est utilisé par 3,5 % des sites web à travers le monde. C'est le de gestion de contenu le plus utilisé derrière WordPress et Joomla.. vignette|Écran de modification du contenu dans Drupal 9

Principes

Drupal peut être utilisé à quatre niveaux différents :

Tel quel : une fois celui-ci installé et paramétré, il est utilisable pour créer du contenu structuré et annotable par des utilisateurs qui peuvent s'enregistrer sur le site. Les menus du site ont alors un aspect standard. Personnalisation simple : il est ensuite possible de personnaliser l'emplacement d'affichage ou l'affichage lui-même, de composants visuels standards (date et heure, derniers posts, nombre de connectés, etc.) ainsi que le thème d'affichage (terme expliqué plus bas) du site. Extension par ajouts externes : ajout, paramétrage et personnalisation de modules optionnels n'appartenant pas au noyau. À ce stade et au suivant, il n'est pas rare que le développeur du site écrive aussi un thème de présentation qui lui soit propre. Extension par développement interne : écriture de nouveaux modules régis par la GPL, qu'il est souvent efficace (mais nullement obligatoire) de présenter ensuite à la communauté afin que celle-ci puisse participer à leur évolution.

Drupal lui-même utilise une base de données, qui comprend 60 à 300 tables selon les modules activés – et une hiérarchie de fonctions toutes substituables, qui permettent au développeur d'application expérimenté de réécrire la seule partie qu'il désire modifier, et uniquement au niveau d'abstraction auquel il s'intéresse, sans toucher au reste. La bonne ou la mauvaise connaissance du niveau exact auquel intervenir peut diviser ou multiplier le temps de réalisation d'un facteur 10 ou plus.

Drupal comporte environ d'API, mais le site api.drupal.org permet de les retrouver en accès direct par une partie quelconque du contenu de leur nom. Dans la pratique, un module simple peut fort bien n'en utiliser qu'une dizaine, voire moins.

Contenus, traitements, présentation

Contenus, ou nœuds

Drupal nomme tout contenu qu'il gèreExcepté les commentaires, gérés pour des raisons de performance dans une table qui leur est propre. un "nœud". Une page d'article sera par exemple un nœud. Une page de livre aussi.

Ce nœud possédera d'une part un type : forum, article de fond, information brève, tutoriel, blog, commentaire, formulaire de saisie, livre collaboratif, image ou galerie d'images, sondage interactif, page de wiki, description d'article à vendre en ligne, petite annonce classée, etc. : la forme n'est plus assujettie à une architecture prédéterminée, ce qui rend le contenu aisément reconfigurable. En contrepartie de cette liberté, le concepteur doit se familiariser avec sa logique particulière.

Le nœud possédera par ailleurs, conformément aux spécifications de son type, des champs : nom, type, date, auteur, image éventuelle, corps, votes de la communauté sur son contenu, etc.

320px|right|La taxinomie peut comporter des ascendances multiples Chaque nœud peut être attaché simultanément à plusieurs termes taxinomiques si on le désire (ainsi une brève sur une médaille d'or française aux Jeux olympiques peut être rattachée à la fois à "Sport" et à "France"mais aussi à un éventuel tag "Médaille d'Or", un autre lié à l'année, etc., comme l'indique le schéma ci-contre). Le concepteur ou l'administrateur ne sont donc pas obligés d'insérer leurs contenus dans une hiérarchie initiale unique. Il faut simplement que les taxinomies restent cohérentes (A ne peut pas dépendre de B dans l'une pendant que c'est B qui dépend de A dans une autre, ce qui n'aurait de toute façon aucun sens).

À sa création, un nœud se voit attribuer un node ID (NID) qui le caractérise. Au fur et à mesure de ses révisions, s'il y en a, le système incrémente un compteur de révision ID (VID). Le concepteur peut choisir de conserver ou non les révisions autres que la plus récente. Chaque nœud possède aussi un titre, ce qui permet aux administrateurs de les gérer de façon plus commode.

La complexité du titre ne joue pas, car l'administrateur aura juste à le cliquer sur une liste, sans jamais avoir à le frapper lui-même.

Le système de révisions successives permet de revenir à une version antérieure si besoin, comme on le fait dans les wikis.

Traitement : modules (PHP)

Les traitements sont assurés par des modules, indépendants, juxtaposables, et combinables (un module peut utiliser les services fournis par un autre, et l'avoir comme prérequis). Ils sont activables et désactivables à volonté sans arrêter le site.

Dans Drupal 6, il existait plusieurs types de modules, les plus simples étant les suivants :

les modules de bloc, associés à des informations de petite taille (exemple : qui est en ligne ou combien de personnes, qui sont les derniers inscrits, quels sont les derniers posts, les plus populaires...). Leurs résultats s'affichent en marge des "grands" contenus, dans des marges de droite, gauche, haut ou bas. les modules de nœud, qui engendrent ce qui n'est pas dans les marges : blog, forum, pages, formulaires, etc. Quatre simili-méthodes leur sont associables en standard : list, configure, save et view, qui indiquent respectivement comment le module doit signaler son existence, comment le configurer, comment sauver cette configuration et comment ce module affichera ses informations.

Dans Drupal 7, il n'existe plus que des zones : l'administrateur du site peut les déplacer à tout moment comme il le veut; le concepteur leur attribue des tailles, des polices et des teintes. Le contenu d'un nœud peut donc parfaitement s'afficher dans les marges latérales si on le désire. Cette possibilité rend des services considérables en développement, permettant d'allouer par exemple des zones au débogage.

Les fonctions d'un module peuvent renvoyer trois choses : un code d'erreur rien, ce qui constitue un autre type d'erreur (WSOD : White Screen Of Death) un vecteur ou un tableau (voire un tableau de tableaux) au sens de PHP. À ce niveau, il n'y a normalement encore aucune balise XHTML injectée. C'est le thème seul qui s'en charge.

Drupal 8, sorti le ., s'articule sur le framework français Symfony 2 dans un souci de normalisation, de s'ouvrir à un grand nombre de développeurs et de tirer pleinement profit de l'approche objet de PHP, en particulier les espaces de noms qui faciliteront l'isolation des modules. Il permettra l'affichage des mêmes contenus - présentés de façon appropriée dans chaque cas - sur les PC, les tablettes et les téléphones mobiles, y compris en utilisant la technologie du pushhttp://plusvite.net/?9f08da07 Webchick (Angela Byron) est coresponsable du noyau Drupal.

De ce fait, Drupal adhère de facto à l'architecture REST..

Présentation : thèmes (CSS et PHP)

Ni les nœuds ni les modules ne s'occupent de la présentation (ni même d'ailleurs les balises XHTML). Ce sont les styles qui en sont chargés, à la manière des feuilles de style en (X)HTML. Un administrateur de site Drupal peut changer profondément le style de celui-ci en quelques clics de souris, pour une commémoration ou un autre événement, par exemple.

Ce système est conçu pour bien séparer le cœur de métier d'un créateur de site (gestion et articulation des données) de la partie uniquement visuelle, qui fait appel à des concepts bien distincts (ergonomie entre autres) et peut avoir avantage à être sous-traitée à une officine spécialisée (agence web, graphiste indépendant).

Il est géré partout où cela est possible par des entrées dans une feuille de style CSS et, là où du traitement spécifique est nécessaire (par exemple alterner deux couleurs de fond pour présenter les lignes successives d'un tableau) par des fonctions de thémage simples écrites en PHP.

Les fonctions de thémage prennent en entrée des chaînes, vecteurs ou tableaux (ou tableaux de tableaux) et produisent en retour une chaîne XHTML de mise en forme qui sera dirigée par le programmeur vers la zone de son choix, désignée par son nom et non par sa position. Le concepteur et l'administrateur du site décident en dernier ressort des endroits de la page où s'afficheront ces informations, ainsi que la couleur et la police, et cela soit par réorganisation de blocs au tableau de bord, soit par modification des feuilles définissant le style de chaque bloc.

Si l'on ne désire modifier que les polices, leurs corps, leurs graisses et leurs couleurs, le module Sweaver permet aussi de le faire dynamiquement à même le site.

Administration des blocs

À un module de bloc sont associées des informations définies et modifiables extérieurement au module par l'administrateur : une information de placement (haut, bas, droite, gauche...), une information de priorité (en général de -10 à +10) par rapport aux autres blocs ayant la même indication de placement, et une information indiquant si ce bloc est activé (=doit être affiché) ou pas.

Cette composition est voisine de la box strategy définie par Donald Knuth pour rendre cohérente la composition d'ouvrages en PAO

Depuis la version 6, les informations de priorité sont gérables par simple glisser/déplacer sur un menu spécial, ce qui facilite les réarrangements fréquents.

À partir de la version 7, il n'y a plus de blocs latéraux opposés à une partie centrale, mais uniquement des régions gérées sur un pied d'égalité par l'administrateur. Ainsi une fenêtre de débogage latérale peut être déplacée d'un clic dans la partie centrale plus vaste le temps d'un développement, etc.

Programmation événementielle

Drupal associe des exécutions de code à chaque objet cliquable (callbacks). Ce qui est développé ne possède donc pas de séquence à proprement parler, et peut être appelé dans un ordre quelconque.

Les fonctions de callbackCe ne sont pas de "vrais" callbacks au sens des interfaces graphiques, par exemple, car une fonction ne s'enregistre pas au moment de l'exécution : c'est directement son nom qui indiquera à quoi elle se rattache; dans d'autres contextes, on nomme parfois ces traitements des exits parce qu'ils effectuent des compléments aux actions standards ou s'y substituent en Drupal sont voisines conceptuellement de la notion de tâche en CICS, à ceci près que la phase de compilation n'a plus lieu d'être, PHP étant un langage interprété.