Como obter cada valor de campo em views-views-unformatted - view-machine-name.html.twig?


19

Eu tenho um arquivo galho: 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 %}

Eu quero ter Titlee body campo estar em 1 linha separada por vírgula como:

título, corpo

Como posso obter o valor de 'title' ou 'body' ou qualquer outro campo nessa exibição durante a depuração?

Usei kint (título) e kint (corpo), mas não está funcionando. Eu também fiz debug = TRUE;no arquivo de serviços.

Mas não é possível descobrir como os campos são valorizados em um galho html não formatado.

Respostas:


20

Como você pode ver em views-view-unformatted.html.twig , ele diz o que também diz o código comentado que você mostrou, não há campos variáveis. Portanto, este modelo não é usado para campos.

Variáveis ​​disponíveis:

  • title: o título deste grupo de linhas. Pode estar vazio.
  • linhas: uma lista dos itens de linha da exibição.
    • Atributos: os atributos HTML da linha.
    • conteúdo: o conteúdo da linha.
  • view: o objeto de visualização.
  • default_row_class: um sinalizador indicando se as classes padrão devem ser usadas nas linhas.

Se você deseja usar campos em um modelo de exibição, use views-view-fields - [view-name] - [machine-name] .html.twig . Lá, você pode imprimir seus campos assim:

<span>{{ fields.title.content }},</span><span>{{ fields.body.content }}</span>

view_name com sublinhado mantidos, enquanto máquina de-nome com sublinhado transformado em vírgula
Matoeil

1
views-view-fields.html.twig pode ser copiado da pasta / core / modules / views / templates e depois renomeado como acima. Para uma determinada vista com um nome de máquina de foobar, o novo nome pode ser vistas-vista-campos - foobar.html.twig. Mais informações sobre as convenções de nomenclatura está disponível aqui: drupal.org/docs/8/theming/twig/twig-template-naming-conventions
bkudrle

13

Eu encontrei uma maneira usando o Kint. Você pode obter valores de campo em views-view - unformatted.html.twig

se você quer um campo específico

Para obter o valor dos campos de texto

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

Para obter os campos da imagem src

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

Para obter alt da imagem, título, largura, altura

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

Nota: substitua o nome da máquina de campo pelo nome da máquina de campos

Se você deseja percorrer vários campos

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

Se você deseja valor bruto

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

7

Eu descobri uma maneira de usar o kint.

Dentro de seu views-view-unformatted.html.twig, use o seguinte código para exibir seus campos individuais:

{% for row in rows %}

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

{% endfor %}

Como usar o Image Field. Quando eu uso field_image, não há saída. O URL da imagem não está sendo exibido ou renderizado!
Harish ST

4

Abaixo está o código de amostra para acessar os valores do campo no arquivo 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 %}

Perfeito! É isso que quero saber, obrigado Renuka.
Niladri Banerjee - Uttarpara 29/03

2

Você precisa criar três arquivos para substituir as visualizações usando arquivos de galho.
1. vistas-vista - foobar.html.twig
2. vistas-vista-não-formatada - foobar.html.twig
3. vistas-vista-campos - foobar.html.twig

O objetivo de todos os três arquivos é descrito abaixo:
1: Implementação de tema padrão para o modelo de visualização principal.
2: Implementação de tema padrão para exibir uma exibição de linhas não formatadas.
3: modelo de exibição padrão para exibir todos os campos em uma linha.

Você deve usar "views-view-fields - foobar.html.twig" para exibir cada um dos seus campos nas visualizações.

Abaixo está uma amostra:

<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>

Olá, Eu tentei o acima em views-view-foobar.html.twig, mas não consigo imprimir um único campo. Eu depuro campos usando kint (), ele mostra a matriz 'nothing' na parte superior.
Shakil Ahmad 03/10

0

De acordo com a minha experiência, não há uma maneira fácil de gerar um valor de campos que não fazem parte da estrutura da entidade - views-views-unformatted - view-.html.twig.

Muito para imprimir um text (plain)campo. Tão doloroso para imprimir um flag_field, entity_referencee assim por diante.

Tendo que conseguir isso sem passar por todo o código principal da exibição, eu tive que criar esse hack:

  1. adicione uma entidade de campo de texto sem formatação falsa
  2. conecte o valor do campo de visualização em um módulo personalizado:
  3. galho (finalmente) o valor desejado no modelo

Mais detalhes aqui /drupal//a/288316/13760

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.