Как переопределить файл шаблона item-list.html.twig для field_slider_images в Drupal 8?

Я хочу переопределить файл шаблона списка элементов core/themes/classy/templates/dataset/item-list.html.twig для перечисления полей field_slider_images, а также field_blog_tags соответственно их множественных значений поля.

Я выбрал "Ненумерованный список" в представлении.

Пожалуйста, проверьте прикрепленное изображение.

Тип отображения: неупорядоченный список для field_slider_images

Я создал следующие файлы:

  1. пункт-лист - поле-блог-tags.html.twig
  2. пункт-лист - поля слайдер images.html.twig

Но это не отображается для перечисления полей.

Когда я создаю item-list.html.twig, только к нему будет доступ.

Однако оба поля имеют разные данные для стиля, и я не могу получить текущее имя поля, которое загружает его данные в item-list.html.twig.

1 ответ

Я кратко взглянул на это, и не кажется, что в "списке предметов" есть предложения, что весьма прискорбно.

В этой ситуации есть два варианта:

  1. Создайте свое собственное предложение, которое будет выполнять именно то, что вам нужно. Вам придется сделать что-то вроде этого:

/

/*add new variable to theme with suggestion name*/
function hook_theme_registry_alter(&$theme_registry) {
  $theme_registry['item_list']['variables']['suggestion'] = '';
}

//send a value to newly added variable to use it build the suggestion
function hook_ENTITY_TYPE_view(array &$build, $entity, $display, $view_mode) {
    //add condition here if field exists or whatever, do the same for other field
    $build['field_slider_images']['#suggestion'] = 'field_slider_images';

}

//use newly added variable to build suggestion
function hook_theme_suggestions_THEME_HOOK(array $variables) {//THEME_HOOK=item_list

  $suggestions = array();
  if(isset($variables['suggestion'])){
    $suggestions[] = 'item_list__' . $variables['suggestion'];
  }

  return $suggestions;
}

Теперь вы должны иметь возможность использовать item-list -field-slider-images.html.twig

  1. Второй вариант - делать то, что делали другие в ядре: использовать новую тему.

    function hook_ENTITY_TYPE_view(array &$build, $entity, $display, $view_mode) { //add condition here if field exists or whatever, do the same for other field $build['field_slider_images']['#theme'] = array( 'item_list', 'item_list__field_slider_images', );

}

Другие вопросы по тегам