Aanmaken van geavanceerde thema-instellingen
In het administratiegedeelte van Drupal heeft elk thema zijn eigen instellingenpagina op admin/Appearance/Settings/themeName. Deze pagina bevat een formulier met standaardinstellingen zoals “Logo-instellingen” en “Favicon-instellingen”.
In Drupal 8 kunnen thema’s het volledige formulier met thema-instellingen aanpassen door een PHP-functie toe te voegen in het bestand THEMENAME.theme of in het bestand theme-settings.php. In een van deze bestanden moet het thema gebruikmaken van de functie THEMENAME_form_system_theme_settings_alter(&$form, $form_state). Zie «Form API in Drupal 8» en de volledige lijst van Form en render elementen, evenals de documentatie van hook_form_FORM_ID_alter(), om meer te leren over de volledige flexibiliteit van de Form API.
Hier is een voorbeeld: stel dat je een thema “foo” hebt en je wilt een tekstveld toevoegen met de standaardwaarde “blue bikeshed”. Voeg het volgende toe in het bestand foo/foo.theme of foo/theme-settings.php:
function foo_form_system_theme_settings_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id = NULL) {
// Work-around voor een core bug die admin-thema’s beïnvloedt. Zie issue #943212.
if (isset($form_id)) {
return;
}
$form['foo_example'] = array(
'#type' => 'textfield',
'#title' => t('Widget'),
'#default_value' => theme_get_setting('foo_example'),
'#description' => t("Plaats deze tekst in de widget-ruimte op je site."),
);
}
Om een standaardwaarde in te stellen voor elk toegevoegd formulierelement, moet je een config/install/THEME.settings.yml bestand toevoegen met een eenvoudige regel: SETTING_NAME: DEFAULT_VALUE. Voor ons foo-thema moet je het bestand foo/config/install/foo.settings.yml bewerken en de volgende regel toevoegen:
foo_example: blue bikeshed
In elk van de PHP-bestanden van je thema kun je de door de gebruiker ingestelde waarde ophalen met:
$foo_example = theme_get_setting('foo_example');
Let op: themabouwers kunnen complexe dynamische formulieren maken met behulp van de geavanceerde Form API (autocomplete, inklapbare fieldsets).
Instellingswaarden gebruiken in je themabestanden
Om een parameter in een Twig-bestand te gebruiken, moet je een nieuwe variabele aan het Twig-bestand toevoegen via een preprocess-functie in het bestand THEMENAME.theme.
$variables['varname'] = theme_get_setting('varname')
Bijvoorbeeld, om onze foo_example-parameter toe te voegen aan het bestand node.html.twig, voeg je het volgende toe aan foo.theme:
<?php
function foo_preprocess_node(&$variables) {
$variables['foo_example'] = theme_get_setting('foo_example');
}
Daarna kun je in node.html.twig toegang krijgen tot foo_example zoals bij elke gewone Twig-variabele:
{{foo_example}}
Meer informatie
Zie de change record voor Drupal 8: https://www.drupal.org/node/2382645