Schreiben Sie Ihre erste Modul-View
Diese Anleitung richtet sich an PHP-Entwickler, die eine neue Seite unter einer eigenen Adresse möchten. Am Ende haben
Sie eine Erweiterung acmereport mit einem Modul acmereport und einer View list unter /acmereport/list,
geschrieben als Klasse, durch eine Richtlinie geschützt und ein Template rendernd. Ersetzen Sie acme durch Ihr eigenes
Präfix (Klassenbenennung und das Präfix exp).
Inhalt
- Bevor Sie beginnen
- Schritt 1: die Erweiterung und ihre Aktivierung
- Schritt 2: das Modul registrieren
- Schritt 3: die View und die Richtlinie deklarieren
- Schritt 4: die View-Klasse
- Schritt 5: die View-Datei
- Schritt 6: das Template
- Schritt 7: Autoloads, Caches, eine Richtlinie
- Schritt 8: prüfen
- Wie es weitergeht
Bevor Sie beginnen
Sie brauchen einen Entwicklungs-Checkout mit einer Installation (Einen PHP-Entwicklungs-Checkout einrichten) und ein Administratorkonto, um eine Richtlinie zuzuweisen. Die Dateien, die Sie anlegen:
extension/acmereport/
settings/site.ini.append.php
settings/module.ini.append.php
modules/acmereport/module.php
modules/acmereport/list.php
classes/runnable/views/acmereport/list.php
design/standard/templates/acmereport/list.tplSchritt 1: die Erweiterung und ihre Aktivierung
Legen Sie das Verzeichnis extension/acmereport/ an und aktivieren Sie es für die Installation in
settings/override/site.ini.append.php:
[ExtensionSettings]
ActiveExtensions[]=acmereportSchritt 2: das Modul registrieren
extension/acmereport/settings/module.ini.append.php:
[ModuleSettings]
ExtensionRepositories[]=acmereport
ModuleList[]=acmereport
*/ ?>ExtensionRepositories[] sagt dem Kernel, dass er in extension/acmereport/modules/ nach Modulen suchen soll.
Schritt 3: die View und die Richtlinie deklarieren
extension/acmereport/modules/acmereport/module.php:
$Module = array( 'name' => 'Acme report' );
$ViewList = array();
$ViewList['list'] = array(
'script' => 'list.php',
'functions' => array( 'read' ),
'params' => array(),
'unordered_params' => array( 'offset' => 'Offset' ) );
$FunctionList = array();
$FunctionList['read'] = array();functionsnennt die Richtlinie, die ein Benutzer braucht:acmereport/read.unordered_paramsordnet/acmereport/list/(offset)/20$Params['Offset']zu.- Jeder Schlüssel ist in der Referenz zu module.php beschrieben.
Schritt 4: die View-Klasse
extension/acmereport/classes/runnable/views/acmereport/list.php:
namespace Exponential\View\Extension\Acmereport\Acmereport;
class ListView extends \Exponential\Runnable\ModuleView
{
public function run( array $scope )
{
$params = $scope['Params'];
$offset = isset( $params['Offset'] ) ? max( 0, (int)$params['Offset'] ) : 0;
$items = \eZPersistentObject::fetchObjectList( \acmeReportItem::definition(), null, null,
array( 'created' => 'desc' ),
array( 'offset' => $offset, 'length' => 20 ) );
$tpl = \eZTemplate::factory();
$tpl->setVariable( 'items', is_array( $items ) ? $items : array() );
$tpl->setVariable( 'offset', $offset );
return array(
'content' => $tpl->fetch( 'design:acmereport/list.tpl' ),
'path' => array( array( 'text' => \ezpI18n::tr( 'extension/acmereport', 'Reports' ), 'url' => false ) ) );
}
}list ist in PHP ein reserviertes Wort, deshalb heißt die Klasse ListView, so wie der Kernel seine eigene benennt
(Exponential\View\Kernel\Section\ListView); der Namespace folgt Exponential\View\Extension\<Ext>\<Module>\<View>
(Modul-Views als Klassen). Die Klasse acmeReportItem ist das persistente Objekt aus
Definitionen persistenter Objekte im Detail; für einen ersten Versuch
übergeben Sie stattdessen ein Array.
Schritt 5: die View-Datei
extension/acmereport/modules/acmereport/list.php, die Datei, die module.php nennt, besteht aus einer Zeile:
return \Exponential\View\Extension\Acmereport\Acmereport\ListView::main( __FILE__, get_defined_vars() );get_defined_vars() übergibt der Klasse, was eZProcess::runFile() definiert hat: $Params (mit dem Modul als
$Params['Module']) und den Rest.
Schritt 6: das Template
extension/acmereport/design/standard/templates/acmereport/list.tpl:
<h1>{'Reports'|i18n( 'extension/acmereport' )}</h1>
{if $items|count}
<ul>
{foreach $items as $item}
<li>{$item.status|wash}: {$item.amount|wash}</li>
{/foreach}
</ul>
{else}
<p>{'No reports yet.'|i18n( 'extension/acmereport' )}</p>
{/if}Registrieren Sie das Design, damit das Template gefunden wird, in extension/acmereport/settings/design.ini.append.php:
[ExtensionSettings]
DesignExtensions[]=acmereport
*/ ?>Jeder Wert läuft durch |wash (Ausgaben aus PHP maskieren).
Schritt 7: Autoloads, Caches, eine Richtlinie
php -l extension/acmereport/classes/runnable/views/acmereport/list.php
php bin/php/ezpgenerateautoloads.php -e
php bin/php/ezcache.php --clear-allIn der Administration unter Rollen und Richtlinien: Geben Sie einer Testrolle die Richtlinie acmereport/read
(Modul acmereport, Funktion read) und weisen Sie die Rolle Ihrem Testbenutzer zu. Führen Sie unter Velocity statt
des Cache-Befehls php bin/php/console exp:velocity deploy aus, damit die Worker die neue Klasse laden.
Schritt 8: prüfen
Öffnen Sie /acmereport/list im Siteaccess der Site, angemeldet als Testbenutzer.
| Sie sehen | Ursache |
|---|---|
| das Modul oder die View wurde nicht gefunden | ModuleList[] oder ExtensionRepositories[] fehlt, oder der INI-Cache wurde nicht geleert |
| Zugriff verweigert | dem Benutzer fehlt acmereport/read |
Class ... not found | Autoloads nicht neu generiert, oder Namespace und Klassenname weichen von der View-Datei ab |
| das Template wurde nicht gefunden | DesignExtensions[] fehlt, oder der Pfad unter templates/ weicht ab |
| eine leere Seite | ein PHP-Fehler: Aktivieren Sie die Debug-Ausgabe und lesen Sie var/log/error.log |
Wie es weitergeht
- Fügen Sie ein Formular mit Aktionen und dem Formular-Token hinzu: Eigene Module und Views.
- Geben Sie Templates die Daten mit einer Fetch-Funktion: Eine Fetch-Funktion schreiben.
- Testen Sie die Logik ohne Datenbank: PHPUnit ohne Datenbank.
- Machen Sie es beim nächsten Mal schneller mit Setup > RAD (RAD-Werkzeuge).
Verwandte Seiten
- Module und Views (Erweiterungsentwickler)
- View-Ergebnisse, Templates und das Pagelayout
- Richtlinienfunktionen und Einschränkungen
- 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.