Как переопределить файл шаблона item-list.html.twig для field_slider_images в Drupal 8?
Я хочу переопределить файл шаблона списка элементов core/themes/classy/templates/dataset/item-list.html.twig для перечисления полей field_slider_images, а также field_blog_tags соответственно их множественных значений поля.
Я выбрал "Ненумерованный список" в представлении.
Пожалуйста, проверьте прикрепленное изображение.
Я создал следующие файлы:
- пункт-лист - поле-блог-tags.html.twig
- пункт-лист - поля слайдер images.html.twig
Но это не отображается для перечисления полей.
Когда я создаю item-list.html.twig, только к нему будет доступ.
Однако оба поля имеют разные данные для стиля, и я не могу получить текущее имя поля, которое загружает его данные в item-list.html.twig.
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
Второй вариант - делать то, что делали другие в ядре: использовать новую тему.
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', );
}