xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Добавить в основные настройки сайта свою опцию

Опубликовано в

Пример добавления в основные настройки сайта поля для ввода телефона:

1. MODULENAME.module:

/**
 * Implements hook_form_FORM_ID_alter(): system_site_information_settings.
 */
function MODULENAME_form_system_site_information_settings_alter(array &$form, FormStateInterface $form_state) {
  $form['site_information']['site_phone'] = [
    '#type' => 'textfield',
    '#title' => t('Phone'),
    '#default_value' => \Drupal::config('system.site')->get('phone'),
  ];
 
  $form['#submit'][] = 'MODULENAME_form_system_site_information_settings_submit';
}
 
/**
 * Custom submit callback for system_site_information_settings form.
 */
function MODULENAME_form_system_site_information_settings_submit(array &$form, FormStateInterface $form_state) {
  \Drupal::configFactory()->getEditable('system.site')
    ->set('phone', $form_state->getValue('site_phone'))
    ->save();
}

2. config/schema/MODULENAME.schema.yml:

system.site:
  mapping:
    phone:
      type: string
      label: 'Site phone'

3. Ну и по желанию можно добавить токен [site:phone]:

MODULENAME.tokens.inc:

/**
 * Implements hook_token_info().
 */
function MODULENAME_token_info() {
  $info['tokens']['site']['phone'] = [
    'name' => t('Site phone'),
    'description' => t('Site phone.'),
  ];
 
  return $info;
}
 
/**
 * Implements hook_tokens().
 */
function MODULENAME_tokens($type, $tokens, array $data, array $options, BubbleableMetadata $bubbleable_metadata) {
  $replacements = [];
 
  if ($type == 'site') {
    foreach ($tokens as $name => $original) {
      if ($name == 'phone') {
        $replacements[$original] = \Drupal::config('system.site')->get('phone');
      }
    }
  }
 
  return $replacements;
}
Написанное актуально для Drupal 8
Похожие записи

Комментарии RSS

-'#type' => 'textfield',
+'#type' => 'tel',

в config/schema/MODULENAME.schema.yml ещё добавить бы:
type: config_object

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании