Я хочу использовать пользовательский шаблон списка элементов в модуле, который изменяет <h3>
тег. Элементы, которые я отображаю, представляют собой массивы рендеринга ссылок.
Когда я использую шаблон по умолчанию, массив рендеринга ссылок работает правильно и выводит ссылки. Когда я использую собственный шаблон, ссылки больше не отображаются. Я пропустил шаг?
Это код, который я использую в модуле.
функция mymodule_theme ($ существующая, $ тип, $ тема, $ путь) {
возвращаться [
'mymodule__item_list' => [
'переменные' => [
'предметы' => [
'атрибуты' => [],
'значение' => [],
],
'название' => '',
'list_type' => 'ул',
'wrapper_attributes' => [],
'атрибуты' => [],
'пустой' => NULL,
'контекст' => [],
],
'template' => 'mymodule--item-list',
],
];
}
Файл шаблона /templates/mymodule--item-list.html.twig содержит следующий код.
{#
/**
* @файл
* Реализация пользовательской темы для списка элементов.
*
* Доступные переменные:
* - items: Список предметов.Каждый элемент содержит:
* - атрибуты: атрибуты HTML, которые будут применяться к каждому элементу списка.
* - значение: содержимое элемента списка.
* - title: Название списка.
* - list_type: Тег для элемента списка ("ul" или "ol").
* - wrapper_attributes: HTML-атрибуты, применяемые к обёртке списка.
* - атрибуты: атрибуты HTML, которые будут применяться к списку.
* - пусто: сообщение, отображаемое при отсутствии элементов. Допустимое значение
* строка или массив рендеринга.
* - контекст: список контекстных данных, связанных со списком. Может содержать:
* - list_style: Пользовательский стиль списка.
*
* @см. template_preprocess_item_list()
*
* Тема @ingroup
*/
#}
{% если context.list_style %}
{%- установить атрибуты = атрибуты.addClass('item-list__' ~ context.list_style) %}
{% конец%}
{% если элементы или пусто %}
{%- если заголовок не пустой -%}
<p><strong>{{ title }}</strong></p>
{%-конец-%}
{%- если элементы -%}
<{{ list_type }}{{ атрибуты }}>
{%- для элемента в элементах -%}
<li{{ item.attributes }}>{{ item.value }}</li>
{%- конец для -%}
</{{ тип_списка }}>
{%- еще -%}
{{- пустой -}}
{%-конец-%}
{%-конец%}
В модуле я собираю элементы ссылок в неупорядоченный список, используя следующий код.
// $foo и $bar устанавливаются из предыдущего кода.
$commonlyUsedForItems = [];
foreach ($commonlyUsedfor as $name) {
$url = Url::fromRoute('mymodule.page', [], [
'запрос' => [
'фу' => $фу,
'бар' => $бар,
'имя' => $имя,
],
]);
// Создаем массив массивов рендеринга ссылок.
$commonlyUsedForItems[] = [
'#тип' => 'ссылка',
'#title' => $this->t($name),
'#url' => $url,
];
}
$commonlyUsedForRenderArray = [
'#theme' => 'mymodule__item_list',
'#тип' => 'ул',
'#title' => 'Обычно используется для:',
'#items' => $commonlyUsedForItems,
'#attributes' => ['class' => 'commonlyUsedFor'],
'#wrapper_attributes' => ['класс' => 'контейнер'],
];
Приведенный выше код работает корректно, меняя '#theme' => 'mymodule__item_list',
к '#theme' => 'item_list',
.
Код как бы работает, но он выводит пустые маркеры.
Я знаю, что могу вернуть $commonlyUsedForItems
array для разметки и жесткого кодирования HTML, но я стараюсь максимально разделить HTML и PHP.
Есть ли у вас какие-либо идеи?