Pour comprendre le fonctionnement de Drupal, vous devez comprendre le mécanisme de diffusion de pages de Drupal.
En bref, tous les appels / urls / requêtes sont servis par index.php qui charge Drupal en incluant divers fichiers / modules d'inclusion puis en appelant la fonction appropriée, définie dans le module, pour servir la requête / l'url.
Voici l'extrait du livre, Pro Drupal Development, qui explique le processus de bootstrap de Drupal,
Le processus Bootstrap
Drupal s'amorce à chaque demande en passant par une série de phases d'amorçage. Ces phases sont définies dans bootstrap.inc et se déroulent comme décrit dans les sections suivantes.
Initialiser la configuration
Cette phase remplit le tableau de configuration interne de Drupal et établit l'URL de base ($ base_url) du site. Le fichier settings.php est analysé via include_once (), et toute variable ou chaîne de remplacement qui y est établie est appliquée. Voir les sections «Remplacements de variables» et «Remplacements de chaînes» du fichier sites / all / default / default.settings.php pour plus de détails.
Cache de page précoce
Dans les situations nécessitant un haut niveau d'évolutivité, un système de mise en cache peut devoir être appelé avant même qu'une connexion à une base de données ne soit tentée. La première phase de cache de page vous permet d'inclure (avec include ()) un fichier PHP contenant une fonction appelée page_cache_ fastpath (), qui prend le relais et renvoie le contenu au navigateur. Le cache de page précoce est activé en définissant la variable page_cache_fastpath sur TRUE, et le fichier à inclure est défini en définissant la variable cache_inc sur le chemin du fichier. Voir le chapitre sur la mise en cache pour un exemple.
Initialiser la base de données
Pendant la phase de base de données, le type de base de données est déterminé et une connexion initiale est établie qui sera utilisée pour les requêtes de base de données.
Contrôle d'accès basé sur le nom d'hôte / IP
Drupal autorise le bannissement des hôtes sur une base par nom d'hôte / adresse IP. Dans la phase de contrôle d'accès, une vérification rapide est effectuée pour voir si la demande provient d'un hôte banni; si tel est le cas, l'accès est refusé.
Initialiser la gestion de session
Drupal tire parti de la gestion de session intégrée de PHP mais remplace certains des gestionnaires par le sien pour implémenter la gestion de session basée sur la base de données. Les sessions sont initialisées ou rétablies dans la phase de session. L'objet global $ user représentant l'utilisateur actuel est également initialisé ici, bien que pour plus d'efficacité, toutes les propriétés ne soient pas disponibles (elles sont ajoutées par un appel explicite à la fonction user_load () si nécessaire).
Cache de page tardif
À la fin de la phase de cache de page, Drupal charge suffisamment de code de support pour déterminer s'il faut ou non servir une page à partir du cache de page. Cela inclut la fusion des paramètres de la base de données dans le tableau créé lors de la phase d'initialisation de la configuration et le chargement ou l'analyse du code du module. Si la session indique que la demande a été émise par un utilisateur anonyme et que la mise en cache de page est activée, la page est renvoyée à partir du cache et l'exécution s'arrête.
Détermination de la langue
Lors de la phase de détermination de la langue, le support multilingue de Drupal est initialisé et une décision est prise quant à la langue qui sera utilisée pour servir la page actuelle en fonction des paramètres du site et de l'utilisateur. Drupal prend en charge plusieurs alternatives pour déterminer la prise en charge de la langue, telles que le préfixe de chemin et la négociation de langue au niveau du domaine.
Chemin
Lors de la phase de chemin, le code qui gère les chemins et l'alias de chemin est chargé. Cette phase permet de résoudre les URL lisibles par l'homme et gère la mise en cache et les recherches de chemin Drupal internes.
Plein
Cette phase complète le processus d'amorçage en chargeant une bibliothèque de fonctions communes, la prise en charge des thèmes et la prise en charge du mappage de rappel, de la gestion des fichiers, de l'Unicode, des boîtes à outils d'image PHP, de la création et du traitement de formulaires, de la gestion du courrier, des tables triables automatiquement et de la pagination de l'ensemble de résultats. Le gestionnaire d'erreurs personnalisé de Drupal est défini et tous les modules activés sont chargés. Enfin, Drupal déclenche le hook init, afin que les modules aient la possibilité d'être notifiés avant le début du traitement officiel de la requête.
Une fois que Drupal a terminé le bootstrap, tous les composants du framework sont disponibles. Il est temps de prendre la demande du navigateur et de la transmettre à la fonction PHP qui la gérera. Le mappage entre les URL et les fonctions qui les gèrent est réalisé à l'aide d'un registre de rappel qui prend en charge à la fois le mappage d'URL et le contrôle d'accès. Les modules enregistrent leurs rappels en utilisant le crochet de menu (pour plus de détails, voir le chapitre 4).
Lorsque Drupal a déterminé qu'il existe un rappel auquel l'URL de la requête du navigateur mappe avec succès et que l'utilisateur a l'autorisation d'accéder à ce rappel, le contrôle est transféré à la fonction de rappel.
Traitement d'une demande
La fonction de rappel effectue tout le travail nécessaire pour traiter et accumuler les données nécessaires pour répondre à la demande. Par exemple, si une demande de contenu tel que http://example.com/
q = node / 3 est reçue, l'URL est mappée à la fonction node_page_view () dans node.module. Un traitement ultérieur récupérera les données de ce nœud de la base de données et les placera dans une structure de données. Ensuite, il est temps de thématiser.
Thématiser les données
La thématisation implique la transformation des données récupérées, manipulées ou créées en HTML (ou XML ou autre format de sortie). Drupal utilisera le thème que l'administrateur a sélectionné pour donner à la page Web l'aspect et la convivialité corrects. La sortie résultante est ensuite envoyée au navigateur Web (ou à un autre client HTTP).