logo

Extra Block Types (EBT) - Nieuwe Layout Builder ervaring❗

Extra Block Types (EBT) - gestileerde, aanpasbare bloktypes: Slideshows, Tabs, Cards, Accordions en vele andere. Ingebouwde instellingen voor achtergrond, DOM Box, javascript-plugins. Ervaar vandaag al de toekomst van layout building.

Demo EBT-modules Download EBT-modules

❗Extra Paragraph Types (EPT) - Nieuwe Paragraphs ervaring

Extra Paragraph Types (EPT) - analoge op paragrafen gebaseerde set modules.

Demo EPT-modules Download EPT-modules

Scroll

Een pagina aanmaken in een Drupal-module programmatisch

04/10/2025, by Ivan

Menu

Er zijn twee stappen bij het aanmaken van een eenvoudige pagina in Drupal:

Definieer het pad en de parameters ervan.

Deze stap omvat de paginatitel, toegangsvereisten voor de pagina en meer.

In Drupal 7 moest je hook_menu() implementeren.

In Drupal 8 maak je het bestand <module_name>.routing.yml in de hoofdmap van je module.

Schrijf de code om de body van de pagina terug te geven.

In Drupal 7 moest je een page callback-functie schrijven die was opgegeven in hook_menu().

In Drupal 8 moet de page callback ofwel een methode van een klasse zijn, of een geregistreerde service. Dit kan verschillen afhankelijk van de omstandigheden (HTTP of HTTPS, content headers, enz.), maar dat valt buiten dit introductieniveau.

Samenvatting

Door het voorbeeld op deze pagina te volgen, kun je een eenvoudige pagina in je eigen module maken zonder meer te leren over de interne werking van Drupal. Voor meer details, zie de Change Record over de wijziging van het routeringssysteem en de verschillende implementaties in de core en in het Examples-project.

Routing YAML-bestand voor de voorbeeldmodule

De routeringsinformatie staat in example/example.routing.yml:

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

example.my_page

  • Dit is de machinenaam van de route. Volgens conventie moeten machinenaam-routes de vorm hebben van module_name.sub_name. Wanneer andere delen van de code naar de route moeten verwijzen, gebruiken ze de machinenaam.

path

  • Dit geeft het pad naar de pagina op je site. Let op de begin-slash (/).

defaults

  • Dit beschrijft de page en title callbacks. @todo: Waar kunnen deze standaardwaarden overschreven worden?

requirements

  • Dit bepaalt de voorwaarden waaronder de pagina getoond wordt. Je kunt permissies aangeven, modules die geactiveerd moeten zijn, en andere voorwaarden.

Implementatie van de pagina voor de voorbeeldmodule

De klasse Controller ExampleController moet gedefinieerd worden in example/src/Controller/ExampleController.php:

<?php
namespace Drupal\example\Controller;

use Drupal\Core\Controller\ControllerBase;

/**
 * Provides route responses for the Example module.
 */
class ExampleController extends ControllerBase {

  /**
   * Returns a simple page.
   *
   * @return array
   *   A simple renderable array.
   */
  public function myPage() {
    $element = array(
      '#markup' => 'Hello, world',
    );
    return $element;
  }

}

namespace

  • Hier wordt de prefix gedeclareerd die nodig is om de volledige naam van de klasse die we definiëren te bepalen. Vergelijk het documentblok en de klassenaam. De autoloader van de klasse weet dat om de klasse \Drupal\example\Controller\ExampleController te vinden, hij het bestand modules/example/src/Controller/ExampleController.php moet laden.

use

  • Dit laat ons ControllerBase gebruiken in plaats van de volledig gekwalificeerde naam. Dit maakt onze class-regel veel eenvoudiger te lezen.

myPage()

  • De methode die in het YAML-bestand is opgegeven, moet public zijn. Ze moet een renderbare array teruggeven.