logo

Extra Block Types (EBT) - Neue Erfahrung im Layout Builder❗

Extra Block Types (EBT) - gestylte, anpassbare Blocktypen: Diashows, Registerkarten, Karten, Akkordeons und viele andere. Eingebaute Einstellungen für Hintergrund, DOM Box, Javascript Plugins. Erleben Sie die Zukunft der Layouterstellung schon heute.

Demo EBT-Module EBT-Module herunterladen

❗Extra Absatztypen (EPT) - Erfahrung mit neuen Absätzen

Extra Paragraph Types (EPT) - analoger, auf Absätzen basierender Satz von Modulen.

Demo EPT-Module EPT-Module herunterladen

Scroll

Seite programmgesteuert in einem Drupal-Modul erstellen

20/06/2025, by Ivan

Es gibt zwei Schritte, um eine einfache Seite in Drupal zu erstellen:

Definieren Sie den Pfad und seine Parameter.

Dieser Schritt beinhaltet den Seitentitel, Zugriffsanforderungen für die Seite und weitere Einstellungen.

In Drupal 7 mussten Sie hook_menu() implementieren.

In Drupal 8 erstellen Sie eine Datei <modulname>.routing.yml im Hauptmodulverzeichnis.

Schreiben Sie Code, der den Seiteninhalt zurückgibt.

In Drupal 7 mussten Sie eine Seiten-Callback-Funktion schreiben, die in hook_menu() definiert war.

In Drupal 8 muss der Seiten-Callback entweder eine Klassenmethode oder ein registrierter Service sein. Er kann sich je nach Bedingungen (HTTP oder HTTPS, Content-Header usw.) unterscheiden, aber das geht über diese Einführung hinaus.

Zusammenfassung

Folgen Sie dem Beispiel auf dieser Seite, um eine einfache Seite in Ihrem eigenen benutzerdefinierten Modul zu erstellen, ohne weitere Details über die internen Abläufe von Drupal zu kennen. Für weitere Informationen siehe Änderungsprotokoll zur Routing-Änderung und verschiedene Implementierungen im Core und in Projektbeispielen.

Routing YAML-Datei für das Beispielmodul

Routing-Informationen werden in example/example.routing.yml gespeichert:

example.my_page:
  path: '/mypage/page'
  defaults:
    _controller: '\Drupal\example\Controller\ExampleController::myPage'
    _title: 'Meine erste Seite in D8'
  requirements:
    _permission: 'access content'

example.my_page

  • Dies ist der maschinenlesbare Name der Route. Konventionell sollten maschinenlesbare Routennamen modulname.untername sein. Wenn andere Teile des Codes auf die Route verweisen, verwenden sie diesen maschinenlesbaren Namen.

path

  • Dies gibt den Pfad zur Seite auf Ihrer Website an. Beachten Sie den führenden Schrägstrich (/).

defaults

  • Beschreibt die Seiten-Callbacks und den Titel. @todo: Wo können diese Standardwerte überschrieben werden?

requirements

  • Definiert die Bedingungen, unter denen die Seite angezeigt wird. Sie können Berechtigungen, erforderliche aktivierte Module und andere Bedingungen angeben.

Seiten-Implementierung für das Beispielmodul

Die Controller-Klasse ExampleController sollte in example/src/Controller/ExampleController.php definiert sein:

<?php
namespace Drupal\example\Controller;

use Drupal\Core\Controller\ControllerBase;

/**
 * Stellt Routenantworten für das Beispielmodul bereit.
 */
class ExampleController extends ControllerBase {

  /**
   * Gibt eine einfache Seite zurück.
   *
   * @return array
   *   Ein einfaches renderbares Array.
   */
  public function myPage() {
    $element = array(
      '#markup' => 'Hallo, Welt',
    );
    return $element;
  }

}

Namespace

  • Hier wird der Präfix deklariert, der für die vollständige Klassendefinition benötigt wird. Vergleichen Sie den Dokumentblock mit dem Klassennamen. Der Autoloader weiß, dass er die Klasse \Drupal\example\Controller\ExampleController in der Datei modules/example/src/Controller/ExampleController.php finden muss.

use

  • Erlaubt uns, ControllerBase ohne den vollständigen Namespace zu verwenden, was den Klassennamen im Code lesbarer macht.

myPage()

  • Die im YAML-File angegebene Methode muss öffentlich sein und ein renderbares Array zurückgeben.

Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.