
In tegenstelling tot Drupal 7 is het maken van meerdere instanties van een blok om op je site te plaatsen een eenvoudige taak in Drupal 8.
In deze handleiding leer je hoe je programmatisch een blok toevoegt aan de interface voor bloklay-out. Hoe je een (administratief) configuratieformulier aan een blok toevoegt en hoe je dit verwerkt. Tot slot leer je hoe je standaardconfiguratiewaarden toevoegt en weergeeft voor het formulier.


Blokken in Drupal 8 zijn instanties van het block-plugin systeem.
De Block Manager van Drupal scant je modules op klassen die de annotatie @Block bevatten.
Het onderstaande codevoorbeeld gebruikt de @Block-annotatie samen met de eigenschappen “id” en “admin_label” om een aangepast blok te definiëren.


Laten we nu zeggen dat we de mogelijkheid willen toevoegen voor de sitebouwer om een deel van de configuratie in te voeren voor elk exemplaar van ons aangepaste blok. Houd altijd in gedachten dat alle sitebouwconfiguraties in Drupal 8 kunnen worden geëxporteerd van de ontwikkelsite en geïmporteerd op de live-site (bekend als Configuratiebeheer). Jij, als modulebouwer, kunt ook een standaardconfiguratie aanbieden om het formulier automatisch in te vullen wanneer de sitebouwer een nieuw blok aanmaakt.


Voeg de volgende methode toe aan de klasse HelloBlock
. In dit voorbeeld bevindt deze zich in het bestand src/Plugin/Block/HelloBlock.php
, maar naarmate je meer in een OOP-georiënteerde manier gaat denken, is de fysieke locatie in de bestandsstructuur minder belangrijk dan de namespace. Als je een ervaren OO-programmeur bent, houd je beide nauwkeurig op elkaar afgestemd.


Om de configuratie van block-instanties te gebruiken, kunnen we de methode build() van de klasse HelloBlock aanpassen:
/** * {@inheritdoc} */ public function build() { $config = $this->getConfiguration(); if (!empty($config['hello_block_name'])) { $name = $config['hello_block_name']; } else { $name = $this->t('to no one'); } return [ '#markup' => $this->t('Hello @name!', [ '@name' => $name, ]), ]; }


Deel V van Praktische handleiding voor het maken van basis Drupal 8-modules
Van .info tot tests, alleen de basis
Herinner je je nog dat ik aan het begin van deze les zei dat we een block met een formulier zouden definiëren? Wel, dit is het moment om dat te doen.


Deze handleiding bevat tutorials voor het maken van een eigen field type, widget en formatter in Drupal 8.


Deze tutorial werd oorspronkelijk gepubliceerd op Web Wash. Maar Berdir vroeg of ik de tutorial hier kon plaatsen, dus hier is hij.
De module in Drupal 7 liet toe om codevoorbeelden/snippets op te slaan in een veld. Hij kwam met een aangepast veld genaamd “Snippets field” en toonde drie formulierelementen: beschrijving, broncode en syntax highlighting-modus (welke programmeertaal).
Maar nu is het tijd om de module te upgraden naar Drupal 8.


In Drupal 8 zijn alle field types, widgets en formatters plugins.
Ze worden automatisch gedetecteerd als ze in de juiste mapstructuur geplaatst zijn en de correcte annotatie gebruiken.
De mapstructuur voor een module die alle drie implementeert ziet er zo uit:
foo_bar_fields


Field types bepalen de eigenschappen en het gedrag van velden. Field types worden gedefinieerd als plugins, daarom is het aan te raden om kennis te maken met de Plugin API voordat je een nieuw field type gaat schrijven.
Om een field type in Drupal 8 te maken, heb je een klasse nodig met een FieldType-annotatie.
Locatie van de field type-klasse moet zijn: MODULE_NAME/src/Plugin/Field/FieldType
/modules/foo/src/Plugin/Field/FieldType/BazItem.php
