Templates von Modulansichten
Jede Seite einer Website mit Exponential ist das Ergebnis einer Modulansicht: content/view/full/96 führt die Ansicht view des Moduls
content mit den Parametern full und 96 aus. Die Ansicht ist PHP; das HTML kommt aus Templates. Diese Seite folgt einer Anfrage vom PHP
der Ansicht zu ihrem Template und weiter zum Pagelayout, mit dem Kernel-Code, der jeden Schritt ausführt.
Inhalt
- Die zwei Templates einer Seite
- Die PHP-Seite einer Ansicht
- Was content/view zurückgibt
- Von $Result zu $module_result
- Das Pagelayout wählen
- Variablen, die ein Template einer Knotenansicht bekommt
- Verwandte Seiten
Die zwei Templates einer Seite
- Die Ansicht rendert ihr eigenes Template (für
content/viewist dasnode/view/<view mode>.tploder das passende Override) und legt das HTML in$Result['content']ab. - Der Kernel rendert dann das Pagelayout (
pagelayout.tpldes Designs des Siteaccess), das{$module_result.content}in den Rahmen der Seite setzt: Kopf, Menüs, Fußzeile.
Das Ansichts-Template kennt den Inhalt; das Pagelayout kennt die Seite. Sie verständigen sich über $module_result (aus $Result der Ansicht)
und die persistente Variable.
Die PHP-Seite einer Ansicht
Die module.php eines Moduls gibt seine Ansichten an; zum Beispiel kernel/section/module.php:
$ViewList['view'] = array(
'functions' => array( 'view or assign' ),
'script' => 'view.php',
'ui_context' => 'view',
'default_navigation_part' => 'ezsetupnavigationpart',
'params' => array( 'SectionID' ),
'unordered_params' => array( 'offset' => 'Offset' ) );Das Skript der Ansicht (kernel/section/view.php, dessen Code in kernel/private/classes/views/section/view.php liegt) tut, was jede Ansicht
tut: Es holt die Template-Engine, setzt Variablen, holt ein Template über die Ressource design: und gibt $Result zurück:
$tpl = \eZTemplate::factory();
$tpl->setVariable( "view_parameters", $viewParameters );
$tpl->setVariable( "section", $section );
$Result = array();
$Result['content'] = $tpl->fetch( "design:section/view.tpl" );
$Result['path'] = array( array( 'url' => 'section/list',
'text' => \ezpI18n::tr( 'kernel/section', 'Sections' ) ),
array( 'url' => false,
'text' => $section->attribute('name') ) );eZTemplate::factory()gibt die eine gemeinsame Engine der Anfrage zurück, mit allen aus den Autoload-Listen geladenen Operatoren und Funktionen und registrierter Ressourcedesign:(lib/eztemplate/classes/eztemplate.php).setVariable( $name, $value )legt eine Variable in den Wurzel-Namensraum; insection/view.tplist sie$section.fetch( 'design:section/view.tpl' )findet die Datei über die Design-Ressource (zuerst Overrides, dann die Design-Basen; siehe Template-Ressourcen und Overrides) und gibt den gerenderten Text zurück.$Result['path']wird zur Brotkrumennavigation; jeder Eintrag hattextundurl(false für die aktuelle Seite).
Eine eigene Ansicht in einer Erweiterung folgt demselben Muster; der Durchgang steht in Eigene Module und Ansichten.
Was content/view zurückgibt
Um ein echtes $Result zu sehen, führte ein nur lesendes CLI-Skript auf einer Entwicklungsinstallation die Ansicht so aus, wie der Kernel es tut, mit für diesen
Prozess im Speicher ausgeschaltetem Content-View-Cache und ausgeschalteter Template-Kompilierung (es wurde keine Cache-Datei geschrieben), und
gab die Struktur des zurückgegebenen Arrays aus:
$ini = eZINI::instance();
$ini->setVariable( 'ContentSettings', 'ViewCaching', 'disabled' ); // in memory only
$module = eZModule::findModule( 'content' );
$result = $module->run( 'view', array( 'full', 96 ), false, array() );Ausgabe auf einer Entwicklungsinstallation (die Listen path und title_path sind hier auf ihren ersten und letzten Eintrag gekürzt):
exit status: 1 (STATUS_OK)
$Result: array(11)
content: string (7085 bytes)
view_parameters: array(5)
offset: false
year: false
month: false
day: false
namefilter: false
path: array(4)
0: array(4)
text: 'Websites'
url: '/content/view/full/2'
url_alias: ''
node_id: 2
3: array(4)
text: 'Why Should You Choose Strength Training?'
url: false
url_alias: false
node_id: 96
title_path: array(4)
0: array(4)
text: 'Websites'
url: '/content/view/full/2'
url_alias: ''
node_id: 2
3: array(3)
text: 'Why Should You Choose Strength Training?'
url: false
url_alias: false
section_id: 1
node_id: 96
navigation_part: 'ezcontentnavigationpart'
content_info: array(25)
object_id: 94
node_id: 96
parent_node_id: 92
class_id: 44
class_identifier: 'ng_article'
remote_id: 'media-o-958'
node_remote_id: 'media-n-729'
offset: false
viewmode: 'full'
navigation_part_identifier: 'ezcontentnavigationpart'
node_depth: 4
url_alias: 'fitness/why-should-you-choose-strength-training'
current_language: 'eng-US'
language_mask: 2
main_node_id: 96
main_node_url_alias: false
persistent_variable: false
class_group: false
state: array(2)
2: 1
47: 80
state_identifier: array(2)
section_identifier: 'standard'
parent_class_id: 45
parent_class_identifier: 'ng_landing_page'
parent_node_remote_id: 'media-n-721'
parent_object_remote_id: 'media-o-950'
template_list: array(11)
0: string (96 bytes)
1: string (81 bytes)
2: string (77 bytes)
3: string (75 bytes)
4: string (88 bytes)
5: string (98 bytes)
6: string (68 bytes)
7: string (98 bytes)
8: string (93 bytes)
9: string (66 bytes)
10: string (75 bytes)
cache_ttl: -1
is_default_navigation_part: falseDie Schlüssel werden einzeln in der Referenz des Modulergebnisses erklärt. Zwei Einzelheiten:
is_default_navigation_part fügt eZModule::run() hinzu (lib/ezutils/classes/ezmodule.php): false, wenn die Ansicht navigation_part
selbst gesetzt hat, wie content/view es tut, true, wenn run() es aus default_navigation_part der Ansicht ergänzt hat (wie im
Fehlerergebnis unten); und template_list nennt die genutzten Templates, die der Content-View-Cache speichert, um zu wissen, wann eine
Template-Änderung den Cache veralten lässt.
Ein nicht vorhandener Knoten gibt stattdessen das Ergebnis der Fehleransicht zurück (kernel/private/classes/views/error/view.php):
content/view/full/99999999
exit status: 2 (other)
$Result: array(9)
content: string (1391 bytes)
path: array(2)
0: array(2)
text: 'Error'
url: false
1: array(2)
text: 'kernel (3)'
url: false
errorCode: '404'
errorMessage: 'Not Found'
errorType: 'kernel'
errorNumber: 3
responseHeaders: array(2)
0: 'HTTP/1.1 404 Not Found'
1: 'Status: 404 Not Found'
is_default_navigation_part: true
navigation_part: 'ezcontentnavigationpart'Der Exit-Status ist eZModule::STATUS_FAILED (2); STATUS_OK ist 1.
Von $Result zu $module_result
Der Web-Kernel (ezpKernelWeb, kernel/private/classes/ezpkernelweb.php) führt die Ansicht in seiner Dispatch-Schleife aus und dann, bevor
er das Pagelayout rendert:
- setzt er
ui_context(wenn die Ansicht es nicht getan hat),ui_component,is_mobile_deviceundmobile_device_aliasam Ergebnis,pathauffalse, wenn die Ansicht keinen angegeben hat, unduriauf die URI der Anfrage; - ruft er
$tpl->setVariable( "module_result", $moduleResult )auf; - setzt er die anderen Variablen des Pagelayouts:
| Variable | Wert |
|---|---|
$module_result | $Result der Ansicht, mit den oben ergänzten Schlüsseln |
$site | uri, redirect, meta ([SiteSettings] MetaDataArray, mit einer aus dem Pfad gebildeten Beschreibung, wenn keine gesetzt ist), version (die Version von Exponential), page_title (der Titel des Moduls) |
$current_user | der aktuelle eZUser (false, wenn der Siteaccess kein Benutzerobjekt braucht) |
$anonymous_user_id | [UserSettings] AnonymousUserID |
$access_type | der aktuelle Siteaccess (Name, Typ) |
$warning_list | für die Seite gesammelte Warnungen, oder false |
$navigation_part | das eZNavigationPart von $module_result.navigation_part (Standard ezcontentnavigationpart) |
$uri_string, $requested_uri_string | die URI, die lief, und die, die der Besucher angefragt hat |
$ui_context, $ui_component | Kopien der Schlüssel des Ergebnisses |
- holt er das Pagelayout und gibt es aus. Davor entfernt er jede in der Engine verbliebene Variable
$node, sodass ein Pagelayout nie versehentlich das$nodedes Ansichts-Templates sieht.
Das Pagelayout wählen
- Standardmäßig holt der Kernel
design:pagelayout.tpl. - Eine Ansicht kann
$Result['pagelayout']setzen: einen Template-Namen (der Kernel fügtdesign:hinzu, außer der Name hat schon eine Ressource mit:), oderfalsefür überhaupt kein Pagelayout; dann ist$Result['content']die ganze Antwort. Die Benutzeransichtenlogin,register,activate,successundforgotpasswordnutzen sologinpagelayout.tpl, undcontent/treemenusetztfalse. - Die Ansicht
layout/set/<style>setzt$Result['pagelayout']aus demPageLayoutdieses Stils inlayout.iniund fügt den Override-Schlüssellayouthinzu, sodass URLs wie/layout/set/print/content/view/full/96mit einem anderen Pagelayout gerendert werden.
Variablen, die ein Template einer Knotenansicht bekommt
eZNodeviewfunctions::generateNodeViewData() (kernel/classes/eznodeviewfunctions.php) setzt diese, bevor es
design:node/view/<view mode>.tpl holt:
| Variable | Wert |
|---|---|
$node | der Knoten (eZContentObjectTreeNode) |
$viewmode | der Ansichtsmodus, etwa full |
$language_code | die in der URL verlangte Sprache, oder false |
$view_parameters | die Ansichtsparameter |
$collection_attributes, $validation | für Formulare zur Informationssammlung |
$persistent_variable | false; ein Template kann sie setzen (siehe Die persistente Variable, von innen) |
$node_path | dieselbe Liste wie $Result['path'] |
In der URL angegebene Benutzerparameter werden außerdem als eigene Variablen gesetzt (der Teil _custom der Ansichtsparameter), sodass
/(color)/red eine Variable $color im Knoten-Template anlegt.
Verwandte Seiten
- Referenz des Modulergebnisses
- Ansichtsparameter
- Die persistente Variable, von innen
- Modulergebnis und content_info
- Eigene Module und Ansichten
- Ergebnisse von Ansichten und das Pagelayout
- Referenz der Moduldefinition
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.