Рейтинг:1

Каков правильный способ получить значения визуализированных полей в шаблоне ветки блочного представления?

флаг in

У меня есть блок на главной странице моего сайта, в котором отображаются последние новости из Новости страница (3 последних записи). Это вид, вот его настройки:

введите описание изображения здесь

Я пытаюсь сделать этот блок лучше. Поскольку это представление, я использую блок--блок-просмотров--блок-новостей-1.html.twig файл шаблона для моей цели. Все, что я хотел, это получить в нем отображаемые значения поля, чтобы обернуть каждое из них в <div> со своим собственным классом css. Я пытался много раз и путем проб и ошибок, наконец, написал следующий код:

{%
  установить классы = [
    'блокировать',
    'block-' ~ configuration.provider|clean_class,
    'block-' ~ plugin_id|clean_class,
  ]
%}
<div класс="контейнер">
    <section{{ атрибуты.addClass(классы) }}>
        {{ title_prefix }}
            <h2 class="article_title">Районные новости</h2>
        {{ title_suffix }}
        {% заблокировать содержимое %}
            <ul class="content article_list">
                {% для строки в содержании['#view'].result %}
                    <li class="article_item">
                        <div class="article_item-header">
                            <div class="article_release_date">
                                {{ content['#view'].field['published_at'].value(row)|date("d.m.Y") }}
                            </div> 
                            {{ контент['#view'].поле['название'].getItems(строка) }}
                        </div>
                        <div класс="статья_описание">
                            {{ содержимое['#view'].поле['тело'].getItems(строка) }}
                        </div>
                    </li>
                {% конец для %}
            </ul>
        {% конечный блок%}
        <div class="article_read_more">
            <a href="/news">Просмотреть все</a>
        </div>
    </раздел>
</div>

Работает удовлетворительно: я вижу разметку и переменные в этом блоке на главной странице именно такими, какими я их спроектировал. Но я не могу сказать, что он работает просто идеально, потому что, когда я захожу в «Последние сообщения журнала», я вижу ошибки, исходящие от этого. .ветка файл шаблона. Сообщение об ошибке: Ошибка пользователя: "raw" является недопустимым ключом массива рендеринга в Drupal\Core\Render\Element::children() (строка 97 core/lib/Drupal/Core/Render/Element.php). Когда я удаляю файл ветки, ошибка больше не возникает. Итак, мой вопрос: как правильно добиться такой же разметки без таких ошибок? Может быть, мой подход совершенно неверен, и я должен изменить его. Или, может быть, мой подход правильный, но в моем коде есть небольшая ошибка? В любом случае, я хотел бы знать, почему я получаю такую ​​​​ошибку в журнале и как ее избежать. Пожалуйста, помоги мне.

sonfd avatar
флаг in
Я бы порекомендовал обновить ваше представление, чтобы отобразить режим просмотра новостного узла, тогда вы сможете выполнять всю логику отображения полей и того, как они отображаются для каждого элемента новостей, прямо в специальном шаблоне.
Рейтинг:0
флаг eg

Я думаю, что попытки тематических полей внутри блока - не лучшая практика.

Подход, упомянутый в комментариях сонфд очень хороший.

В противном случае вы можете оформить каждое поле в представлении, переопределив шаблон поля, например:

views-view-field--{имя машины просмотра}--{имя машины страницы или блока}--{имя поля}.html.twig

Это был бы лучший подход.

Надеюсь, что это ответ на ваш вопрос.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.