Weergavemodi: view-modi en form-modi
Weergavemodi
Er bestaan weergavemodi (beschikbaar via admin/structure/display-mode) om verschillende weergaven van contententiteiten te bieden voor weergave of bewerking. Er zijn twee soorten weergavemodi – «view-modi» en «form-modi». Beide soorten weergavemodi – view-modi en form-modi – zijn voorbeelden van «configuratie-objecten». Hier is een voorbeeld van een geëxporteerde view-modus.
uuid: 15dc7aa9-13fd-4412-9c06-06d09f915d08 langcode: en status: false dependencies: module: - node id: node.full label: 'Full content' targetEntityType: node cache: true
referentie: core.entity_view_mode.node.full.yml
De belangrijkste property waar je op moet letten is targetEntityType. Elke weergavemodus (view-modus of form-modus) is gekoppeld aan precies één type contententiteit. Volgens conventie zijn er labels die voor meerdere weergavemodi gebruikt worden. Bijvoorbeeld, het standaardprofiel van Drupal Core gebruikt het woord «Full» in labels van view-modi voor node-, user block- en comment-entiteiten.
View-modi en displays
- Worden in bulk beheerd via: /admin/structure/display-mode/view
- Ingeschakeld voor elk bundle onder «Aangepaste weergave-instellingen» via URL’s zoals: /admin/structure/types/manage/page/display (waar «page» de bundle van de node-entiteit is)
- Geconfigureerd voor een specifieke view-modus van een bundle via URL’s zoals: /admin/structure/types/manage/page/display/teaser (waar «page» de bundle van de node-entiteit is en «teaser» de view-modus)
View-modi als concept bestonden al vóór Drupal 8. Ze bestonden in Drupal 7. In Drupal 6 was er het concept «build modes». View-modi stellen Drupal sitebouwtools, zoals Entity Reference-velden, in staat om een entiteit op een bepaalde manier op te vragen. Bijvoorbeeld: stel dat «song» en «artist» elk een nodetype zijn, en de song heeft een referentieveld naar artist. De «full»-weergave van de song-node kan de «teaser»-weergave van de artist-node tonen. In dit voorbeeld is «teaser» de view-modus die door de artist-node gebruikt wordt, en «full» de view-modus van de song.
Meestal geldt: als een sitebouwer een artist-node in teaser-modus wil tonen, dan configureert die sitebouwer specifieke instellingen voor de artist-teaser combinatie. Dit kan door naar het tabblad «Manage Display» van de bundleconfiguratie te gaan. Een voorbeeld van zo’n pagina in het standaardprofiel van Drupal Core is /admin/structure/types/manage/article/display
Op die pagina kan de sitebouwer aangepaste instellingen inschakelen voor veldweergave per bundle (veldvolgorde en formatter-instellingen) voor elke view-modus. Niet alle view-modi hoeven speciale instellingen te hebben voor alle bundles. In dit voorbeeld hebben alleen de view-modi «RSS» en «Teaser» hun eigen instellingen. Alle andere view-modi vallen terug op de «Default»-configuratie. De koppeling tussen de bundel van een entiteitstype en een view-modus wordt een view display genoemd. @see EntityViewDisplayInterface

Form-modi en (form-)operaties
- Worden in bulk beheerd via: /admin/structure/display-mode/form
- Ingeschakeld voor elke bundle via URL’s zoals: /admin/structure/types/manage/page/form-display (waar «page» de bundle van de node-entiteit is)
- Geconfigureerd voor een specifieke form-modus van een bundle via URL’s zoals: /admin/structure/types/manage/page/form-display/simple (waar «page» de bundle van de node-entiteit is en «simple» de form-modus)
Net als view-modi zijn form-modi een manier om verschillende veldconfiguraties te maken binnen dezelfde bundle van een contententiteit. Form-modi laten meerdere sets van veldvolgorde en widgetinstellingen toe, net zoals view-modi verschillende volgordes en formatter-instellingen toelaten.
In Drupal 7 hadden we veld en widget samen op het tabblad «Manage Fields» van een contenttype. Nu is dat opgesplitst in twee tabbladen: «Manage Fields» en «Manage Form Display». Dit geeft ons meer flexibiliteit in hoe formulieren eruitzien wanneer iemand content toevoegt of bewerkt. Het tabblad «Manage Display» blijft hetzelfde als in Drupal 7. Naast contenttypes kunnen we ook view-modi beheren voor andere entiteitstypes, zoals users, taxonomie, comments en custom blocks.
Bovendien laten form-operaties toe om te bepalen welke klassen gebruikt worden voor formulieren zoals de delete form van een node. De klasse voor node-delete verschilt van die voor node-edit. Operaties worden gedefinieerd in annotaties van de entiteit.
Hier is een voorbeeld dat 2 custom form-operaties toont, samen met de «default» form-modus, allemaal binnen hetzelfde MyEntityForm. Zorg ervoor dat dit formulier ContentEntityForm uitbreidt.
/**
* @ContentEntityType(
* id = "myentity",
* handlers = {
* "form" = {
* "default" = "Drupal\myentity\Form\MyEntityForm",
* "add" = "Drupal\myentity\Form\MyEntityForm",
* "edit" = "Drupal\myentity\Form\MyEntityForm",
* "delete" = "Drupal\myentity\Form\MyEntityDeleteForm",
* },
* },
* )
*/
Als je operaties in bestaande entiteiten wilt toevoegen of wijzigen, kun je hook_entity_type_build en hook_entity_type_alter gebruiken.
Momenteel moet er expliciet een operatie ingesteld zijn voor de gebruikte form-modus. In tegenstelling tot view-modi (die terugvallen op de default weergave als er geen display bestaat voor een view-modus), vallen form-modi standaard niet terug op de default-operatie. Dit kan als een bug worden beschouwd. Zie #2511720: Allow form modes to use default operation if form operation is not explicitly set.
Om een formulier in een custom form-modus weer te geven, gebruik je _entity_form in je route. Bijvoorbeeld, om de custom «edit» form van MyEntity te tonen, gebruik je deze route:
entity.myentity.edit_form:
path: '/myentity/{myentity}/edit'
defaults:
_entity_form: myentity.edit
_title: 'Edit MyEntity'
requirements:
_permission: 'edit myentity entities'
Een ander voorbeeld:
Een veelvoorkomende noodzaak is dat registratieformulieren niet alle uservelden tonen. Zodra een gebruiker geregistreerd is, krijgt hij toegang tot het profielbewerkingsformulier waarin meer velden staan. Dit is een voorbeeld van zo’n configuratie:
- Klik op «Add field» via /admin/config/people/account/fields
- Kies bij de volgende stap het veldtype: List (Text)
- Geef het label: «Subscription list»
- Klik «Save and continue»
- Vul de lijst met toegestane waarden in, bijvoorbeeld:
1 | Nieuws
2 | Belangrijke mededelingen
3 | Aanbiedingen, Kortingen, Deals
4 | Partnerberichten
- Klik op «Save»
- Maak dit een verplicht veld
- Selecteer alle vier de waarden als standaard en klik Save
- Ga naar het tabblad «Manage Form Display»
- Onderaan de lijst met velden is er een sectie «Custom display settings», vouw die open.
- In het veld «Use custom display settings for the following form modes» vink «Register» aan en klik Save
- Nu heb je een tweede tabblad genaamd «Register»
- Schakel het veld «Subscription list» uit door het naar «Disabled» te slepen. Klik Save
- Ga naar het tabblad «Manage Display» om te bevestigen dat het veld «Subscription list» daar wel ingeschakeld is
Log uit en ga naar het registratieformulier. Het veld «Subscription list» zal niet zichtbaar zijn.
Na inloggen is het veld «Subscription list» beschikbaar in het profielbewerkingsformulier.