Создание расширенных настроек темы
В разделе администрирования Drupal каждая тема имеет свою собственную страницу настроек по адресу admin/Appeance/Settings/themeName. Эта страница имеет форму со стандартными настройками, такими как «Настройки изображения логотипа» и «Настройки значка ярлыка».
В Drupal 8 темы могут изменять всю форму настроек темы, добавляя функцию PHP либо в файл THEMENAME.theme, либо в файл theme-settings.php. В одном из этих файлов тема должна использовать функцию подключения THEMENAME_form_system_theme_settings_alter(&$form, $form_state). См. «API форм в Drupal 8» и полный список элементов Form и render, а также документацию hook_form_FORM_ID_alter() docs, чтобы узнать о полной гибкости API форм.
Вот пример, если у вас есть тема «foo» и вы хотите добавить текстовое поле со значением по умолчанию «blue bikeshed». Добавьте следующее в файл foo/foo.theme или в файл foo/theme-settings.php:
function foo_form_system_theme_settings_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id = NULL) { // Work-around for a core bug affecting admin themes. See 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("Place this text in the widget spot on your site."), ); }
Чтобы установить значение по умолчанию для любого добавляемого элемента формы, вам нужно добавить файл config/install/THEME.settings.yml простой строкой: SETTING_NAME: DEFAULT_VALUE. Для нашей темы foo вам нужно отредактировать файл foo/config/install/foo.settings.yml и добавить следующую строку:
foo_example: blue bikeshed
В любом из PHP-файлов вашей темы вы можете получить значение, заданное пользователем, вызвав:
$foo_example = theme_get_setting('foo_example');
Обратите внимание, что авторы тем могут создавать сложные динамические формы, используя расширенный API форм (автозаполнение, складные наборы полей).
Получение значений настроек в файлах вашей темы
Чтобы использовать параметр в файле Twig, вам необходимо добавить новую переменную в файл Twig, добавив ее с помощью функции предварительной обработки в файле THEMENAME.theme.
$variables['varname'] = theme_get_setting('varname')
Например, чтобы добавить наш параметр foo_example в файл node.html.twig, добавьте его в файл foo.theme:
<?php function foo_preprocess_node(&$variables) { $variables['foo_example'] = theme_get_setting('foo_example'); }
Затем в файле node.html.twig вы можете получить доступ к foo_example, как к любой обычной переменной Twig:
{{foo_example}}
Больше информации
Смотрите запись изменений для Drupal 8: https://www.drupal.org/node/2382645
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.