В Drupal 8 заголовки, метатеги и другие элементы страницы обычно автоматически генерируются модулями и темами. Однако иногда вам может понадобиться удалить ненужные элементы из раздела head вашего сайта. В этой статье мы рассмотрим, как удалить лишнее из head в Drupal 8.

Удаление модулей и тем из head

Один из способов удалить ненужные элементы из head — это отключить соответствующие модули или темы. Если вы знаете, какой модуль или тема добавляет лишние элементы, вы можете просто отключить их.

Чтобы отключить модуль, откройте файл sites/default/settings.php в текстовом редакторе и добавьте следующую строку перед строкой $settings['bootstrap']['file_public_path'] = 'sites/default/files';:

$settings['module_name']['status'] = 0;

Замените module_name названием модуля, который вы хотите отключить. После сохранения файла модуль будет отключен и его элементы не будут отображаться в head вашего сайта.

Аналогично, чтобы отключить тему, откройте файл sites/default/settings.php, найдите строку, начинающуюся с $settings['bootstrap']['theme_key'] = 'theme_name'; и измените значение theme_name на имя темы, которую вы хотите отключить:

$settings['bootstrap']['theme_key'] = 'theme_name';

После сохранения файла тема будет отключена и её элементы больше не будут отображаться в head.

Drupal Hook_preprocess_HOOK()

Если вы не хотите полностью отключать модуль или тему, но все равно хотите удалить некоторые элементы из head, вы можете использовать хук hook_preprocess_HOOK(). Этот хук позволяет вам изменить внешний вид различных элементов, включая head.

Ниже приведен пример кода, который позволяет удалить некоторые элементы из head, используя хук hook_preprocess_HOOK():

/**
 * Implements hook_preprocess_HOOK() for html.html.twig.
 */
function YOUR_THEME_preprocess_html(&$variables) {
  // Удаление метатега X-UA-Compatible.
  unset($variables['page']['#attached']['html_head'][0]);

  // Удаление метатега generator.
  unset($variables['page']['#attached']['html_head'][1]);
}

В этом примере мы удаляем метатеги X-UA-Compatible и generator из head. Вы можете добавить или удалить элементы, изменяя код в функции YOUR_THEME_preprocess_html().

Вопросы и ответы

1. Как добавить новый метатег в head?

Чтобы добавить новый метатег в head, вы можете использовать хук hook_preprocess_HOOK(). Ниже приведен пример кода:

/**
 * Implements hook_preprocess_HOOK() for html.html.twig.
 */
function YOUR_THEME_preprocess_html(&$variables) {
  // Добавление нового метатега.
  $new_meta_tag = [
    '#type' => 'html_tag',
    '#tag' => 'meta',
    '#attributes' => [
      'name' => 'description',
      'content' => 'Описание вашего сайта',
    ],
  ];

  $variables['page']['#attached']['html_head'][] = [$new_meta_tag, 'new_meta_tag'];
}

В этом примере мы добавляем новый метатег description с указанным содержимым. Вы можете изменять атрибуты метатега, изменяя код в функции YOUR_THEME_preprocess_html().

2. Как удалить стандартный метатег в Drupal 8?

Чтобы удалить стандартный метатег в Drupal 8, вы можете использовать хук hook_preprocess_HOOK() и функцию unset(). Ниже приведен пример кода:

/**
 * Implements hook_preprocess_HOOK() for html.html.twig.
 */
function YOUR_THEME_preprocess_html(&$variables) {
  // Удаление стандартного метатега.
  unset($variables['page']['#attached']['html_head'][0]);
}

В этом примере мы удаляем первый метатег из head. Вы можете изменять индекс метатега или добавлять дополнительные строки unset(), чтобы удалить другие метатеги.

3. Как изменить порядок метатегов в head?

Для изменения порядка метатегов в head вам необходимо использовать хук hook_preprocess_HOOK() и функцию array_unshift(). Ниже приведен пример кода:

/**
 * Implements hook_preprocess_HOOK() for html.html.twig.
 */
function YOUR_THEME_preprocess_html(&$variables) {
  // Изменение порядка метатегов.
  $new_meta_tag = $variables['page']['#attached']['html_head'][0];
  array_unshift($variables['page']['#attached']['html_head'], $new_meta_tag);
}

В этом примере мы перемещаем первый метатег в конец массива, чтобы он отображался последним. Вы можете изменять индекс метатега или использовать функции array_push() и array_shift() для изменения порядка метатегов.