Wie macht Drupal 7 eine Seite rendern? Was ist das MVC-View-System?
Wenn es um das Rendern der endgültigen HTML-Seite für eine Anfrage geht, verwenden die meisten PHP-Frameworks (MVC-basiert), mit denen ich gearbeitet habe, eine grundlegende Layout- / Seiten-PHP-Datei. und rendert dann unsere verschiedenen Unteransichten über Includes oder View-Rendering-Methoden.
%Vor%Ich bin ein wenig verwirrt, was Drupal angeht. Ich lese durch Pro Drupal Entwicklung, und es beginnt in ähnlicher Gegend mit einem %code% . Wie auch immer, es beschönigt, wie die Theme-Engine (ist das der richtige Begriff?) Die verschiedenen Teile von PHP in diese Seite bringt (keine Kritik, das Buch nimmt einen Ansatz an, der anders ist als der Weg, auf dem ich bin).
Außerdem haben die Drupal 7-Themes anscheinend nicht die Datei %code% , daher ist es für mich nicht klar, woher das Seitenskelett stammt. Auch von dem, was ich gelesen habe, scheint es wie "Blöcke" beteiligt zu sein, aber es ist mir nicht klar, ob "Blöcke" die gesamte Seite makieren, oder ob Blöcke etwas sind, das selektiv von Themen verwendet wird.
Also, wie funktioniert Drupal 7, wenn Sie von High-Level-Konzepten arbeiten (oder so detailliert wie Sie möchten), eine Seite rendern?
Mir ist klar, dass du mit Drupal anfangen kannst und wahrscheinlich solltest, ohne zu verstehen, wie alles zusammenhängt. Ich versuche speziell zu lernen, wie die verschiedenen Drupal-Systeme zusammenkommen. Entschuldigung für Leute, die müde sind, diesen Disclaimer zu lesen!
Ich denke, hier sind zwei Fragen. Erstens, wie wird ein einzelnes Thema / Vorlage gerendert / verwendet / angezeigt und zweitens, wie kommt die gesamte Website zusammen? Ich denke, die zweite Frage wurde bereits oben beantwortet, also werde ich versuchen, das erste etwas mehr zu erklären.
Zuerst muss ein Modul (deshalb existiert system.module für all diese Dinge, die nur ein Modul wie hook_menu () implementieren kann) definieren, dass eine bestimmte Designfunktion / Vorlage existiert, indem man es in hook_theme ()
Apropos, es gibt zwei verschiedene Dinge, die benutzt werden können. Eine Designfunktion, bei der es sich um eine Funktion mit dem Präfix theme_ handelt. Wird oft für kleinere Elemente einer Seite verwendet, die eine komplexere Logik / PHP haben wie theme_table () . Und eine Vorlage, die eine Datei mit der tpl.php wie Seite ist. tpl.php
Um eine Designfunktion / Vorlage zu verwenden, können Sie entweder theme ( ) so:
%Vor%Oder Sie können das neue, so genannte renderbare Array-Ding verwenden. Das ist im Grunde ein Array von Daten + Informationen welches Thema zu verwenden ist:
%Vor%Das zweite ist bevorzugt, weil es bedeutet, dass es so spät wie möglich Thema wird und andere Module es in Haken ändern können. Das Ergebnis wird genau das gleiche sein, drupal_render () wird theme () selbst während des finalen Renderings aufrufen.
Wenn theme () aufgerufen wird, sucht es die zu verwendende Funktion / Datei, schaut, ob es das verwendete Thema überschrieben hat, wenn es so genannte Vorlagenvorschläge gibt und verwendet sie dann.
Um eine Design-Funktion in einem Design zu überschreiben, kopiere es in deine template.php-Datei und ersetze "theme_" durch "yourthemename_". Wenn es sich um eine tpl.php-Datei handelt, kopiere sie in dein Verzeichnis.
Nun, was der letzte Rendering-Prozess macht, ist im Grunde ein großes $ page-Array aufzubauen, das ist ein renderbares Array (Einige Dokumentation davon ist in hook_page_alter () und rufen Sie dann drupal_render () darauf.
Die globale Struktur der Seiten- / Vorlagenhierarchie (die nicht fest codiert ist, sondern durch was auch immer in der $ -Seite gegeben ist) ist ungefähr so:
%Vor%Fast alles ist ein Block in Drupal 7, einschließlich des eigentlichen Inhalts, der typischerweise ein Knoten ist. Ein Design definiert, welche Bereiche es hat, und dann können Sie ihm Blöcke in der Benutzeroberfläche zuweisen.
Werfen Sie einen Blick darauf, wie Seiten auf Drupal 7 von drupalcon unter Ссылка besonders nach 5 Minuten vom Anfang (05:10). Entschuldigung kann nicht viel Detail hier spezifizieren, weil ich es noch selbst beobachte. Und versuche es auch zu verstehen. ;)
[Update]
Nach der Präsentation hier ist meine schnelle Schlussfolgerung, wie drupal 7 eine Seite rendert:
Anstelle des üblichen Ansatzes, den Sie von Ihrer Frage erwähnen
wo eine Top-Level Layout / Seite PHP-Datei legt die grundlegende Dokumentenstruktur fest, und macht dann unsere verschiedenen Unteransichten via includes oder view rendering Methoden
Drupal rendert eine Seite durch einen Rendering-Flow-Ansatz wie diesen
Allerdings glänzt es über das Thema Motor (ist das der richtige Begriff?) bekommt die verschiedenen Teile von PHP hinein Seite (keine Kritik, das Buch einen anderen Ansatz als der Weg, auf dem ich bin).
dass verschiedene Teile bedient werden, beginnend mit dem Rendering von Fluss Nummer 3 (page_callback) bis Fluss Nummer 6 (drupal_render ($ page)) wo es beginnt, ein Array drupal Render-fähigen Array und dann Letzteres in Ihrem Thema zu verwenden die Variable $ page (die von drupal_render ($ page) geliefert wird), um zB drupal Inhalt zu rendern.
Beim Versuch zu verstehen, wie die Vorlagen zusammenpassen, ist das Theme Developer-Modul das beste Tool, das ich gefunden habe. Es funktioniert ein wenig wie Firebug und erlaubt Ihnen, auf Bereiche einer Seite zu klicken, um die Theme-Funktionen oder Template-Dateien zu sehen, die für verschiedene Teile der Seite verwendet werden, zusammen mit dem " Vorschläge ", die für das Überschreiben verwendet werden können.
Vorlagen können auf verschiedene Arten zusammenpassen. Drupal macht einige Annahmen darüber, wie sie verschachtelt werden, was sich in den Standardvariablen widerspiegelt, die in den Schablonendateien verfügbar sind. Allerdings sind sowohl die Vorlagenvorschläge als auch die verfügbaren Variablen verfügbar in ihnen kann geändert werden.
So wie ich es verstehe, page.tpl.php wurde durch html.tpl.php in Drupal 7.
Die beste Beschreibung, die ich für "Blöcke" gehört habe, ist, dass sie das sind, was du verwendest, um Inhalte anzuzeigen, die auf verschiedenen Gebieten wieder verwendet werden. Am häufigsten werden Seitenleisten verwendet, z. B. Listen "Zuletzt aktualisierte Seiten" oder "Wer ist jetzt online?".