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

Lektion 1.4: Ein Skript mit geladenem Kernel

Die Teilnehmenden legen ihren ersten Erweiterungsordner unter Git an, schreiben ein kleines PHP-Skript, das Einstellungen und Inhalte liest, und führen es mit ezexec.php aus, damit der Kernel für sie geladen wird. 45…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/trainers/developers/module-01-the-development-installation/a-script-with-the-kernel-loaded.md

On this page

This page is a translation. Read the English original

Lektion 1.4: Ein Skript mit geladenem Kernel

Am schnellsten lernt man die Klassen des Kernels kennen, indem man sie aufruft. bin/php/ezexec.php lädt den Kernel (Einstellungen, Datenbank, Autoloads) und führt dann eine beliebige PHP-Datei aus. In dieser Lektion legen die Teilnehmenden den Erweiterungsordner an, den sie für den Rest des Kurses verwenden, und schreiben ein Skript, das eine Einstellung und einen Knoten liest.

Auf einen Blick

KursEntwickler
ModulModul 1: Die Entwicklungsinstallation
Dauer45 Minuten (10 Präsentation, 35 Übung)
NiveauEinsteiger
ZielgruppePHP-Entwickler, die neu bei Exponential sind
VoraussetzungenLektion 1.3; ein Texteditor

Lernziele

Nach dieser Lektion können die Teilnehmenden:

  • einen Erweiterungsordner extension/mysite_hello anlegen und unter Git stellen;
  • ein Skript schreiben, das eZINI, eZCLI und eZContentObjectTreeNode verwendet;
  • eine PHP-Datei mit php -l prüfen, bevor sie ausgeführt wird;
  • ein Skript mit php bin/php/ezexec.php <file> ausführen und seine Ausgabe lesen.

Hinweise für Trainer

So präsentieren Sie es

Quelle: Ihre erste Stunde als Entwickler, Übung 6.

  1. Die Kurserweiterung (3 Minuten). Alle Teilnehmenden bauen im Laufe des Kurses eine Erweiterung, mysite_hello. Sie ist noch nicht aktiv; Modul 7 schaltet sie ein. Ein Skript, das mit ezexec.php läuft, braucht keine Aktivierung.
  2. Drei Klassen (4 Minuten). eZINI::instance( 'site.ini' ) liest Einstellungen mit allen angewendeten Overrides; eZCLI::instance() schreibt ins Terminal; eZContentObjectTreeNode::fetch( $nodeID ) lädt einen Knoten (einen Platz im Inhaltsbaum).
  3. Zuerst prüfen (1 Minute). php -l ist die Kompilierprüfung vor allem anderen.
  4. Ausführen (2 Minuten). php bin/php/ezexec.php extension/mysite_hello/scripts/hello.php.

Häufige Fragen

Was ist der Unterschied zwischen einem Knoten und einem Objekt? Ein Objekt ist der Inhalt (mit Versionen und Übersetzungen); ein Knoten ist einer seiner Plätze im Baum. Die meisten Templates und Fetches arbeiten mit Knoten. Modul 4 geht tiefer darauf ein.

Darf ein so ausgeführtes Skript Inhalte ändern? Es läuft mit den vollen Rechten des Kernels. In diesem Kurs lesen Skripte bis Modul 9 nur.

Wie übergebe ich dem Skript Optionen? Skripte, die Optionen brauchen, werden als Konsolenbefehle geschrieben; Lektion 9.2 zeigt, wie.

Stolperfallen

  • Eine Datei außerhalb der Installation. Legen Sie Skripte in der Erweiterung ab; Pfade in den Beispielen sind relativ zum Wurzelverzeichnis der Installation.
  • Als root ausführen. Fügen Sie nichts hinzu: Arbeiten Sie als eigener Benutzer. Als root halten Skripte mit einer Warnung an, solange --allow-root-user nicht angegeben ist.
  • Knoten 2 ist nicht immer die Startseite. Im Schulungspaket ist Knoten 2 die Spitze des Inhaltsbaums. Die Teilnehmenden können die ID in der Administration prüfen.

Praktische Übung

Auf der Entwicklungsinstallation, aus ihrem Wurzelverzeichnis.

  1. Legen Sie den Erweiterungsordner und sein Git-Repository an:

    mkdir -p extension/mysite_hello/scripts
    git -C extension/mysite_hello init
  2. Legen Sie extension/mysite_hello/scripts/hello.php mit diesem Inhalt an:

    <?php
    // Run: php bin/php/ezexec.php extension/mysite_hello/scripts/hello.php
    $cli = eZCLI::instance();
    $ini = eZINI::instance( 'site.ini' );
    $cli->output( 'Site name: ' . $ini->variable( 'SiteSettings', 'SiteName' ) );
    $cli->output( 'Active extensions: ' . count( $ini->variable( 'ExtensionSettings', 'ActiveExtensions' ) ) );
    
    $node = eZContentObjectTreeNode::fetch( 2 );
    if ( $node instanceof eZContentObjectTreeNode )
    {
        $cli->output( 'Node 2: ' . $node->attribute( 'name' ) . ' (class ' . $node->attribute( 'class_identifier' ) . ')' );
        $cli->output( 'Children: ' . $node->subTreeCount( array( 'Depth' => 1 ) ) );
    }
    else
    {
        $cli->error( 'Node 2 was not found' );
    }
  3. Prüfen Sie die Syntax: php -l extension/mysite_hello/scripts/hello.php.

  4. Führen Sie es aus: php bin/php/ezexec.php extension/mysite_hello/scripts/hello.php.

  5. Vergleichen Sie den Namen der Website mit php bin/php/console exp:ini get site.ini/SiteSettings/SiteName.

  6. Ändern Sie das Skript so, dass es die Knoten-ID eines Artikels holt, den Sie in der Administration sehen, und führen Sie es erneut aus.

  7. Fügen Sie am Ende die Zeile eZDebug::writeError( 'Test error from hello.php', 'mysite_hello' ); hinzu, führen Sie das Skript aus und suchen Sie die Zeile in var/log/error.log.

  8. Entfernen Sie die Zeile aus Schritt 7 wieder.

  9. Committen Sie das Skript im eigenen Repository der Erweiterung:

    git -C extension/mysite_hello add scripts/hello.php
    git -C extension/mysite_hello commit -m "Added: First script that reads settings and a node"

Erwartetes Ergebnis

  • Schritt 3 gibt No syntax errors detected aus.
  • Schritt 4 gibt den Namen der Website, die Zahl der aktiven Erweiterungen, Namen und Klasse von Knoten 2 und die Zahl seiner Kinder aus.
  • Schritt 7: var/log/error.log endet mit einer Zeile, die Test error from hello.php und die Kennzeichnung mysite_hello enthält.
  • Schritt 9: git -C extension/mysite_hello log --oneline zeigt einen Commit.
  • Der Trainer prüft die Ausgabe von Schritt 4 auf den Bildschirmen von zwei Teilnehmenden.

Quiz

  1. Was tut bin/php/ezexec.php, bevor es Ihre Datei ausführt?
  2. Welche Klasse liest Einstellungen mit allen angewendeten Overrides? A. eZCLI B. eZINI C. eZDB D. eZScript
  3. Was ist der Unterschied zwischen einem Inhaltsobjekt und einem Knoten?
  4. Welcher Befehl prüft die Syntax einer PHP-Datei, ohne sie auszuführen?
  5. Warum liegt die Kurserweiterung in einem eigenen Git-Repository und nicht in dem des Kernels?
Antworten
  1. Es lädt den Kernel: Einstellungen, Datenbankverbindung und Autoloads.
  2. B. eZINI::instance( 'site.ini' ).
  3. Das Objekt ist der Inhalt mit seinen Versionen und Übersetzungen; ein Knoten ist einer seiner Plätze im Inhaltsbaum.
  4. php -l <file>.
  5. Erweiterungen sind eigene Repositories; der Kernel wird über Composer und Git aktualisiert, und Ihre Arbeit wird in Ihrer eigenen Erweiterung committet (Eine Entwicklungsinstallation einrichten).

Weiterführende Literatur

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