2016-10-18 8 views
3

У меня возникли проблемы с тем, что, по моему мнению, должно быть относительно простым drupal 8 просмотров.Доступ к отдельным полям в Drupal 8 просмотров шаблоны

У меня есть тип контента, называемый странами. Я хотел бы отобразить 3 последних узла страны на моей домашней странице в блоке представлений. Каждая страна отображается с классом «views-row» в контейнере div. Я использую views - view - unformatted - countries - block_1.tpl для создания шаблона вывода.

Я хотел бы выводить что-то вроде следующей разметки:

<a class="view-row-1" href="/link/to/node"> 
    <img src="source-of-teaser-image.png"> 
    <h3>Title of node</h3> 
</a> 

<a class="view-row-2" href="/link/to/node"> 
    <img src="source-of-teaser-image.png"> 
    <h3>Title of node</h3> 
</a> 

<a class="view-row-3" href="/link/to/node"> 
    <img src="source-of-teaser-image.png"> 
    <h3>Title of node</h3> 
</a> 

Проблемы у меня будет доступ к отдельным полям в шаблоне. Если я использую режим просмотра, я могу получить доступ к отдельным полям. Если в представлении выбрать «показать поля», я могу добавить поле для «счетчика результатов» и «путь», что позволило бы мне добавить класс «view-row-N» и связать тег с узлом , но я не могу получить доступ к полям отдельно. У меня есть переменная {{row.content}}, но любая попытка перекопать в эту переменную (например, row.content.field_name) ничего мне не дает, а вызов {{dump (row.content)}} вызывает сбой веб-сайта.

Я не могу вывести это как режим просмотра по двум причинам. У меня нет доступа к полям «просмотр результата» или «путь» в режиме просмотра, и даже если бы у меня были эти переменные, некоторые поля были бы вложены внутри других (изображение и заголовок вложены внутри).

Я чувствую, что это должно быть действительно так просто, как

<a class="view-row-{{ row.content.view_result_counter }}" href="{{ row.content.path }}"> 

и т.д., но я попробовал все, что я могу думать. Неужели я полностью ошибаюсь? Твиг и я пока не ладим ...

ответ

0

Использование режима просмотра контента/просмотра в вашем случае.

1/В «views-view-unformatted.html.twig» вы можете использовать «loop.index» в цикле «для», чтобы получить индекс текущей строки и добавить его в переменную «row_classes».

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

<a href="{{ path('entity.node.canonical', {'node': node.id}) }}"> 
    {{ content.field_img }} 
    {{ node.getTitle()}} 
</a> 

3/Вы, вероятно, получить дополнительный HTML, но вы можете избавиться от большинства из него путем переопределения соответствующих шаблонов.

0

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

  1. Включить Twig отладки: https://www.drupal.org/node/1903374
  2. Осмотреть страницы в браузере (если сайт находится в режиме отладки есть комментарии в html с путями к шаблонам для каждого элемента). Например это шаблон поля: ядро ​​/ темы/Стабильный/шаблоны/виды/виды ракурса-fields.html.twig
  3. Скопируйте нужный шаблон в вашу тему папку
  4. Добавление или изменение разметки.

Вы можете шаблон отладки с помощью {{ dump(variable) }} или {{ kint(variable) }}

3

Я понял, способ с использованием Kint.

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

{% for row in rows %} 

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

{% endfor %} 
0

В вашем случае вы должны использовать просмотр-View-поля - страны - block_1 .html.twig вместо view-view-unformatted - countries - block_1.html. твиковый файл. Шаблон полей просмотров полей будет повторяться во всех строках результата. Ваше мнение-View-поля - страны - block_1.html.twig должны содержать ниже код -

<div> 
    <a class="view-row" href="{{variable-to-print-path }}"> 
    <img src="{{ image-path }}"> 
    <h3>{{ fields.title.content</h3> 
    </a> 
</div> 

Вы можете проверить массив полей с помощью Kint функции как - {{Kint (поля)}}

Проверьте путь изображения и переменную пути привязки с выхода функции kint.

Если вы хотите сделать это в views-view-unformatted - countries - block_1.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 %}