Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

Templates von Modulansichten

Wie eine Modulansicht ihre Templates rendert - die PHP-Seite (eZTemplate::factory(), setVariable(), fetch( 'design:...' )), das Array $Result, das eine Ansicht zurückgibt, und wie der Kernel es dem Pagelayout als…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/template-language/module-view-templates.md

On this page

This page is a translation. Read the English original

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

  1. Die zwei Templates einer Seite
  2. Die PHP-Seite einer Ansicht
  3. Was content/view zurückgibt
  4. Von $Result zu $module_result
  5. Das Pagelayout wählen
  6. Variablen, die ein Template einer Knotenansicht bekommt
  7. Verwandte Seiten

Die zwei Templates einer Seite

  1. Die Ansicht rendert ihr eigenes Template (für content/view ist das node/view/<view mode>.tpl oder das passende Override) und legt das HTML in $Result['content'] ab.
  2. Der Kernel rendert dann das Pagelayout (pagelayout.tpl des 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 Ressource design: (lib/eztemplate/classes/eztemplate.php).
  • setVariable( $name, $value ) legt eine Variable in den Wurzel-Namensraum; in section/view.tpl ist 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 hat text und url (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: false

Die 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:

  1. setzt er ui_context (wenn die Ansicht es nicht getan hat), ui_component, is_mobile_device und mobile_device_alias am Ergebnis, path auf false, wenn die Ansicht keinen angegeben hat, und uri auf die URI der Anfrage;
  2. ruft er $tpl->setVariable( "module_result", $moduleResult ) auf;
  3. setzt er die anderen Variablen des Pagelayouts:
VariableWert
$module_result$Result der Ansicht, mit den oben ergänzten Schlüsseln
$siteuri, 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_userder aktuelle eZUser (false, wenn der Siteaccess kein Benutzerobjekt braucht)
$anonymous_user_id[UserSettings] AnonymousUserID
$access_typeder aktuelle Siteaccess (Name, Typ)
$warning_listfür die Seite gesammelte Warnungen, oder false
$navigation_partdas eZNavigationPart von $module_result.navigation_part (Standard ezcontentnavigationpart)
$uri_string, $requested_uri_stringdie URI, die lief, und die, die der Besucher angefragt hat
$ui_context, $ui_componentKopien der Schlüssel des Ergebnisses
  1. holt er das Pagelayout und gibt es aus. Davor entfernt er jede in der Engine verbliebene Variable $node, sodass ein Pagelayout nie versehentlich das $node des 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ügt design: hinzu, außer der Name hat schon eine Ressource mit :), oder false für überhaupt kein Pagelayout; dann ist $Result['content'] die ganze Antwort. Die Benutzeransichten login, register, activate, success und forgotpassword nutzen so loginpagelayout.tpl, und content/treemenu setzt false.
  • Die Ansicht layout/set/<style> setzt $Result['pagelayout'] aus dem PageLayout dieses Stils in layout.ini und fügt den Override-Schlüssel layout hinzu, sodass URLs wie /layout/set/print/content/view/full/96 mit 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:

VariableWert
$nodeder Knoten (eZContentObjectTreeNode)
$viewmodeder Ansichtsmodus, etwa full
$language_codedie in der URL verlangte Sprache, oder false
$view_parametersdie Ansichtsparameter
$collection_attributes, $validationfür Formulare zur Informationssammlung
$persistent_variablefalse; ein Template kann sie setzen (siehe Die persistente Variable, von innen)
$node_pathdieselbe 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

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.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x