Um zu verstehen, wie Drupal funktioniert, müssen Sie den Mechanismus zur Seitenbereitstellung von Drupal verstehen.
Kurz gesagt, alle Aufrufe / URLs / Anforderungen werden von index.php bedient, das Drupal lädt, indem es verschiedene Include-Dateien / Module einschließt und dann die entsprechende im Modul definierte Funktion aufruft, um die Anforderung / URL zu bedienen.
Hier ist der Auszug aus dem Buch Pro Drupal Development, in dem der Bootstrap-Prozess von Drupal erläutert wird:
Der Bootstrap-Prozess
Drupal bootet sich bei jeder Anforderung selbst, indem es eine Reihe von Bootstrap-Phasen durchläuft. Diese Phasen sind in bootstrap.inc definiert und verfahren wie in den folgenden Abschnitten beschrieben.
Konfiguration initialisieren
In dieser Phase wird das interne Konfigurationsarray von Drupal gefüllt und die Basis-URL ($ base_url) der Site erstellt. Die Datei settings.php wird über include_once () analysiert, und alle dort festgelegten Variablen- oder Zeichenfolgenüberschreibungen werden angewendet. Weitere Informationen finden Sie in den Abschnitten "Variable Overrides" und "String Overrides" der Dateisites / all / default / default.settings.php.
Früher Seiten-Cache
In Situationen, die ein hohes Maß an Skalierbarkeit erfordern, muss möglicherweise ein Caching-System aufgerufen werden, bevor überhaupt eine Datenbankverbindung versucht wird. In der frühen Seiten-Cache-Phase können Sie (mit include ()) eine PHP-Datei einschließen, die eine Funktion namens page_cache_ fastpath () enthält, die Inhalte übernimmt und an den Browser zurückgibt. Der frühe Seitencache wird aktiviert, indem die Variable page_cache_fastpath auf TRUE gesetzt wird, und die einzuschließende Datei wird definiert, indem die Variable cache_inc auf den Pfad der Datei gesetzt wird. Ein Beispiel finden Sie im Kapitel zum Zwischenspeichern.
Datenbank initialisieren
Während der Datenbankphase wird der Datenbanktyp bestimmt und eine erste Verbindung hergestellt, die für Datenbankabfragen verwendet wird.
Hostname / IP-basierte Zugriffssteuerung
Drupal ermöglicht das Verbot von Hosts pro Hostname / IP-Adresse. In der Zugriffskontrollphase wird schnell überprüft, ob die Anforderung von einem gesperrten Host stammt. In diesem Fall wird der Zugriff verweigert.
Sitzungsbehandlung initialisieren
Drupal nutzt die in PHP integrierte Sitzungsbehandlung, überschreibt jedoch einige der Handler mit eigenen, um die datenbankgestützte Sitzungsbehandlung zu implementieren. Sitzungen werden in der Sitzungsphase initialisiert oder wiederhergestellt. Hier wird auch das globale $ user-Objekt initialisiert, das den aktuellen Benutzer darstellt. Aus Effizienzgründen sind jedoch nicht alle Eigenschaften verfügbar (sie werden bei Bedarf durch einen expliziten Aufruf der Funktion user_load () hinzugefügt).
Late Page Cache
In der späten Seiten-Cache-Phase lädt Drupal genügend unterstützenden Code, um zu bestimmen, ob eine Seite aus dem Seiten-Cache bereitgestellt werden soll oder nicht. Dies umfasst das Zusammenführen von Einstellungen aus der Datenbank in das Array, das während der Initialisierungskonfigurationsphase erstellt wurde, und das Laden oder Parsen von Modulcode. Wenn die Sitzung angibt, dass die Anforderung von einem anonymen Benutzer ausgegeben wurde und das Seiten-Caching aktiviert ist, wird die Seite aus dem Cache zurückgegeben und die Ausführung gestoppt.
Sprachbestimmung
In der Phase der Sprachermittlung wird die mehrsprachige Unterstützung von Drupal initialisiert und anhand der Site- und Benutzereinstellungen entschieden, welche Sprache für die aktuelle Seite verwendet wird. Drupal unterstützt verschiedene Alternativen zur Bestimmung der Sprachunterstützung, z. B. Pfadpräfix und Sprachaushandlung auf Domänenebene.
Pfad
In der Pfadphase wird Code geladen, der Pfade und Pfadaliasing verarbeitet. In dieser Phase können von Menschen lesbare URLs aufgelöst werden, und das interne Zwischenspeichern und Nachschlagen von Drupal-Pfaden wird durchgeführt.
Voll
Diese Phase schließt den Bootstrap-Prozess ab, indem eine Bibliothek mit allgemeinen Funktionen, Themenunterstützung und Unterstützung für Rückrufzuordnung, Dateiverwaltung, Unicode, PHP-Image-Toolkits, Formularerstellung und -verarbeitung, E-Mail-Verarbeitung, automatisch sortierbare Tabellen und Ergebnismengen-Paging geladen wird. Der benutzerdefinierte Fehlerhandler von Drupal ist festgelegt und alle aktivierten Module werden geladen. Schließlich löst Drupal den Init-Hook aus, sodass Module die Möglichkeit haben, benachrichtigt zu werden, bevor die offizielle Verarbeitung der Anforderung beginnt.
Sobald Drupal das Bootstrapping abgeschlossen hat, sind alle Komponenten des Frameworks verfügbar. Es ist Zeit, die Anfrage des Browsers an die PHP-Funktion weiterzuleiten, die sie bearbeitet. Die Zuordnung zwischen URLs und Funktionen, die sie verarbeiten, erfolgt mithilfe einer Rückrufregistrierung, die sowohl die URL-Zuordnung als auch die Zugriffssteuerung übernimmt. Module registrieren ihre Rückrufe über den Menü-Hook (weitere Informationen finden Sie in Kapitel 4).
Wenn Drupal festgestellt hat, dass ein Rückruf vorhanden ist, dem die URL der Browseranforderung erfolgreich zugeordnet wurde, und der Benutzer die Berechtigung hat, auf diesen Rückruf zuzugreifen, wird die Steuerung an die Rückruffunktion übergeben.
Anfrage bearbeiten
Die Rückruffunktion erledigt alle erforderlichen Arbeiten, um die zur Erfüllung der Anforderung erforderlichen Daten zu verarbeiten und zu sammeln. Wenn beispielsweise eine Anforderung für Inhalte wie http://example.com/q
= node / 3 empfangen wird, wird die URL der Funktion node_page_view () in node.module zugeordnet. Durch die weitere Verarbeitung werden die Daten für diesen Knoten aus der Datenbank abgerufen und in eine Datenstruktur eingefügt. Dann ist es Zeit für Themen.
Theming der Daten
Beim Theming werden die Daten, die abgerufen, bearbeitet oder erstellt wurden, in HTML (oder XML oder ein anderes Ausgabeformat) umgewandelt. Drupal verwendet das vom Administrator ausgewählte Thema, um der Webseite das richtige Erscheinungsbild zu verleihen. Die resultierende Ausgabe wird dann an den Webbrowser (oder einen anderen HTTP-Client) gesendet.