Одним из способов добавить скрипт в head определённого типа ноды в Drupal является использование модуля JavaScript Injector. Этот модуль позволяет автоматически вставлять JavaScript-код или ссылки на внешние скрипты на определённых страницах или для определённых типов нод.

Шаг 1: Установка и активация модуля JavaScript Injector

Перед тем, как начать использовать JavaScript Injector, необходимо установить и активировать модуль:

1. Зайдите в административную панель Drupal.
2. Перейдите на страницу "Модули" (/admin/modules).
3. Найдите и активируйте модуль "JavaScript Injector".
4. Нажмите кнопку "Сохранить конфигурацию", чтобы применить изменения.

Шаг 2: Добавление скрипта в head определённого типа ноды

После успешной активации модуля JavaScript Injector, вы можете добавить скрипты в head определённого типа ноды:

1. Зайдите в административную панель Drupal.
2. Перейдите на страницу "JavaScript Injector" (/admin/config/development/js_injector).
3. Нажмите кнопку "Добавить новое правило".
4. Введите название правила (например, "Скрипт для типа ноды Article").
5. В поле "Page-specific javascript" введите необходимый JavaScript-код или ссылку на внешний скрипт.
6. В поле "Pages" укажите путь к странице или тип ноды, к которым необходимо применить скрипт (например, "node/add/article" для страницы создания новой статьи).
7. Нажмите кнопку "Сохранить правило", чтобы применить изменения.

Примеры кода

Пример добавления внешнего скрипта для типа ноды Article:

// Вставка ссылки на внешний скрипт
<script data-src="http://example.com/script.js"></script>

// Вставка JavaScript-кода
<script>
  // Ваш JavaScript-код здесь
</script>

1. Как добавить CSS-стили только для определённого типа ноды?

Для добавления CSS-стилей только для определённого типа ноды в Drupal можно использовать модуль CSS Injector. Этот модуль позволяет добавлять CSS-код на определённых страницах или для определённых типов нод. Шаги по установке и настройке модуля аналогичны шагам для модуля JavaScript Injector.

2. Как добавить скрипт только для определённого блока или региона?

Для добавления скрипта только для определённого блока или региона в Drupal можно использовать функцию hook_block_view_alter(). Эта функция позволяет модифицировать вывод блоков в Drupal и добавлять к ним дополнительные JavaScript-код или ссылки на внешние скрипты. Пример использования функции:

/**
 * Implements hook_block_view_alter().
 */
function mymodule_block_view_alter(array &$build, \Drupal\Core\Cache\CacheableMetadata $cacheable_metadata) {
  // Проверяем, что блок с нужным ID находится в нужном регионе.
  if ($build['#id'] == 'BLOCK_ID' && $build['#configuration']['region'] == 'REGION_NAME') {
    $build['#attached']['library'][] = 'my_module/custom_script';
  }
}

3. Как добавить скрипт только для определённого пользовательского роля?

Для добавления скрипта только для определённого пользовательского роля в Drupal можно использовать функцию hook_preprocess_HOOK(). Эта функция позволяет модифицировать переменные рендер-массива в Drupal перед передачей их в шаблон. Пример использования функции:

/**
 * Implements hook_preprocess_HOOK() for node templates.
 */
function mymodule_preprocess_node__NODE_TYPE(&$variables) {
  // Проверяем, что текущий пользователь имеет нужный роль.
  if (\Drupal::currentUser()->hasRole('ROLE_NAME')) {
    $variables['#attached']['library'][] = 'my_module/custom_script';
  }
}