Drupal 8 создайте переопределение шаблона для блока представления в пользовательском модуле


Вопрос:

В Drupal 8: Как добавить переопределение шаблона для блока представления и разместить этот файл ветки в пользовательском модуле - не в моей теме?

Дополнительная Информация:

Я уже создал пользовательский модуль, который создает тип контента, импортирует данные из RSS-канала и генерирует узлы в созданный им тип контента. Модуль также содержит файл представления YML, так что представление для моего типа контента создается, когда модуль установлен. В представлении есть только один дисплей, который представляет собой блок.

Я хотел бы создать переопределение шаблона для блока и разместить переопределение шаблона в модуле (а не в моей теме). Переопределение шаблона выполняет следующие действия:

  • Добавляет соответствующие классы в блок
  • Добавляет изображение рядом с заголовком блока, когда отображается заголовок
  • Обертывает {{содержимое}} в div с соответствующим классом
  • Загружает библиотека пользовательского модуля для применения CSS

Цель состоит в том, чтобы иметь модуль, который может установить нетехнический специалист, назначить блок нужному региону и получить все шаблоны, CSS, JS и т. Д., Извлеченные из модуля. Я не хочу, чтобы им приходилось копировать шаблон в свою тему и т. Д. Я хочу, чтобы блок был представлением, чтобы пользователь мог использовать пользовательский интерфейс представлений для внесения любых желаемых обновлений в поля блока представления, количество возвратов и т.д.

Я смог заставить Drupal распознать шаблон с помощью функции hook_theme_registry_alter(), но переменные из блока равны нулю. И {{метка}}, и {{содержимое}} равны нулю, когда я включаю их в переопределение шаблона.

Вот код hook_theme_registry_alter():

/**
 * Implements hook theme_registry_alter
 **/
function MYMODULE_theme_registry_alter(&$theme_registry){
  $theme_registry['block__views_block__MYVIEW_block_1']['path'] = drupal_get_path('module','MYMODULE') . '/templates/';
  $theme_registry['block__views_block__MYVIEW_block_1']['template'] = 'block--views-block--MYVIEW-block-1';
}

Следует отметить, что когда я использовал функцию hook_theme_registry_alter() для переопределения шаблона страницы просмотра в своем модуле, это сработало. Я предполагаю, что переменные были взяты из псевдонима страницы.

Пожалуйста, включите подробную информацию, потому что Я все еще изучаю различные крючки и то, как передаются переменные. Заранее спасибо!

Author: Carlos, 2018-02-14

1 answers

Чтобы получить те же переменные, что и шаблон блока, добавьте его в качестве базового крючка:

/**
 * Implements hook_theme().
 */
function mymodule_theme() {
  return [
    'block__views_block__MYVIEW_block_1' => [
      'render element' => 'elements',
      'base hook' => 'block',
    ],
  ];
}

Теперь вы можете поместить шаблон ветки в mymodule/templates/, путь и имя файла будут обнаружены автоматически.

 3
Author: 4k4, 2019-11-08 16:18:46