Как получить каждое значение поля в views-views-unformatted - view-machine-name.html.twig?

19

У меня есть файл ветки: views-view-unformatted - view-machine-name.html.twig

{#
/**
 * @file
 * Default theme implementation to display a view of unformatted rows.
 *
 * Available variables:
 * - title: The title of this group of rows. May be empty.
 * - rows: A list of the view's row items.
 *   - attributes: The row's HTML attributes.
 *   - content: The row's content.
 * - view: The view object.
 * - default_row_class: A flag indicating whether default classes should be
 *   used on rows.
 *
 * @see template_preprocess_views_view_unformatted()
 *
 * @ingroup themeable
 */
#}
{% if title %}
  <h3>{{ title }}</h3>
{% endif %}
{% for row in rows %}
  {%
    set row_classes = [
      default_row_class ? 'views-row',
    ]
  %}
  <div{{ row.attributes.addClass(row_classes) }}>
    {{ row.content }}
  </div>
{% endfor %}

Я хочу, чтобы Titleи body поле было в 1 строке, разделенных запятой, как:

название, тело

Как я могу получить значение 'title' или 'body' или любого другого поля в этом представлении при отладке?

Я использовал kint (название) и kint (тело), ​​но это не работает. Я также сделал debug = TRUE;в файле услуг.

Но не могу найти способ иметь значение поля в неформатированной ветке HTML.

Сугандх Кханна
источник

Ответы:

20

Как вы можете видеть в views-view-unformatted.html.twig , он говорит о том, что, как показывает также показанный вами закомментированный код, переменная fields отсутствует. Поэтому этот шаблон не используется для полей.

Доступные переменные:

  • title: заголовок этой группы строк. Может быть пустым.
  • строки: список элементов строки представления.
    • Атрибуты: атрибуты HTML строки.
    • содержание: содержание строки.
  • view: просмотр объекта.
  • default_row_class: флаг, указывающий, должны ли классы по умолчанию использоваться в строках.

Если вы хотите использовать поля в шаблоне представления, используйте views-view-fields - [view-name] - [machine-name] .html.twig . Там вы можете напечатать свои поля следующим образом:

<span>{{ fields.title.content }},</span><span>{{ fields.body.content }}</span>
Нет Sssweat
источник
view_name с подчеркиванием сохранено, а имя машины с подчеркиванием преобразуется в запятую
Matoeil
1
views-view-fields.html.twig можно скопировать из папки / core / modules / views / templates и затем переименовать, как указано выше. Для данного View с именем машины foobar новым именем могут быть views-view-fields - foobar.html.twig. Более подробная информация о соглашениях об именах доступна здесь: drupal.org/docs/8/theming/twig/twig-template-naming-conventions
bkudrle
13

Я нашел способ с помощью Kint, вы можете получить значения полей в views-view - unformatted.html.twig

если вы хотите определенное поле

Чтобы получить значение текстовых полей

{{row.content['#row']._entity.field machine name[0].value}}

Получить поля изображения src

{{file_url(row.content['#row']._entity.field machine name.entity.uri.value)}}

Чтобы получить изображение alt, title, width, height

{{row.content['#row']._entity.field machine name[0].alt/title/width/height}}

Примечание: замените имя машины поля на имя машины вашего поля

Если вы хотите перебрать несколько полей

{% for i in range(0, 10) %}
  {{ row.content['#row']._entity.body[i].value }}
{% endfor %}

Если вы хотите сырое значение

{% for i in range(0, 10) %}
  {{ row.content['#row']._entity.body[i].value|raw }}
{% endfor %}
Сатиш Сундар
источник
7

Я придумала способ использования кинта.

Внутри вашего views-view-unformatted.html.twig используйте следующий код для отображения ваших отдельных полей:

{% for row in rows %}

{{ row.content['#view'].style_plugin.render_tokens[ loop.index0 ]['{{ YOUR_FIELD_NAME }}'] }}

{% endfor %}
Ибрагим Самир
источник
Как использовать поле изображения. Когда я использую field_image, нет вывода. URL-адрес изображения не отображается или не отображается!
Хариш ST
4

Ниже приведен пример кода для доступа к значениям полей в файле views-view-unformatted.html.twig -

{% for row in rows %}
  {% set photo = file_url(row['content']['#row']._entity.field_page_photo.entity.fileuri) %}          
  <li><img src={{ photo }} class="img-responsive img-circle"></li>
{% endfor %}
Ренука Кулкарни
источник
Отлично! Это то, что я хочу знать, спасибо, Ренука.
Ниладри Банерджи - Уттарпара
3

Вам нужно создать три файла, чтобы переопределить представления, используя файлы веток.
1. views-view - foobar.html.twig
2. views-view-unformatted - foobar.html.twig
3. views-view-fields - foobar.html.twig

Назначение всех трех файлов описано ниже:
1: Реализация темы по умолчанию для шаблона основного вида.
2: Реализация темы по умолчанию для отображения неформатированных строк.
3: Шаблон представления по умолчанию для отображения всех полей в строке.

Вы должны использовать "views-view-fields - foobar.html.twig", чтобы вывести каждое ваше поле на представления.

Ниже приведен образец:

<li>
<p>{{ fields.title.content }}</p> // Title field
<p>{{ fields.body.content }}</p> // Body field
<span>{{ fields.created.content }}</span> // Node authored date field
<a href="{{ fields.path.content }}" class="readmore"> read more </a> // Link to actual page
</li>
Праная Агарвал
источник
Привет, я попытался выше в views-view-foobar.html.twig, но не смог напечатать одно поле. Я отлаживаю поля, используя kint (), он показывает массив 'none' в верхней части.
Шакил Ахмад
0

Исходя из моего опыта, не существует простого способа вставить в views-views-unformatted - view-.html.twig значение из полей, не являющихся частью структуры объекта.

Очень напечатать text (plain)поле. Так больно печатать flag_field, entity_referenceи так далее.

Чтобы достичь этого, не пройдя весь код ядра представления, мне пришлось создать этот хак:

  1. добавить фальшивый объект в виде простого текстового поля
  2. перехватить значение поля представления в пользовательском модуле:
  3. веточка (наконец) нужное значение в шаблоне

Более подробная информация здесь /drupal//a/288316/13760

аугусто
источник