Verifique se um campo não está vazio

15

Qual é o melhor método para verificar se um campo está vazio em um modelo de nó.

No node - example.html.twig, podemos usar a variável "content".

Não consigo usar o cheque como verificar um bloco

{% if content.field_example  %}

Eu posso usar algo como isto:

{% if content.field_example['#object'] is defined  %}

Mas qual é o melhor método?

sainf
fonte
11
Use hook_preprocess e verifique programaticamente, talvez adicione variável de indicador. Caso contrário, o que 4k4 escreveu.

Respostas:

21

Como também escrevi em Como você pode renderizar campos a partir de uma referência de entidade em modelos de nó? [Drupal 8] , o conteúdo é uma matriz de renderização que contém dados preparados para exibição.

Se você deseja verificar ou comparar algo, use os valores disponíveis no objeto do nó.

{% if node.field_example.value %}.

Observe que a propriedade depende do tipo de campo. Se for um campo de referência, você precisará usar target_id. A pergunta referenciada é vinculada a uma folha de dicas da API do campo da entidade que lista os tipos de campos comuns e suas propriedades.

Berdir
fonte
Para o campo de imagem {% node.field_article_image.target_id%}
Yogesh Kushwaha 02/12/19
13

Você não pode ter certeza da estrutura da matriz de renderização dentro do conteúdo, portanto, esse não é o melhor método possível.

Esta pode ser uma solução melhor:

{% if content.field_example|render|striptags|trim %}
  <p>field is not empty</p>
{% endif %}

Isso verifica se a renderização do campo gera alguma saída.

Mas isso depende de como você configurou o formato do campo e o que você tenta fazer. Por exemplo, você poderia ter configurado para exibir um rótulo se o campo estiver vazio. Então você tem que ajustar isso. Se você não depende da saída renderizada e deseja apenas verificar, se o campo tiver um valor no banco de dados, use o objeto node. Veja a resposta de Berdir.

4k4
fonte
Considero a resposta de Berdir correta, porque é mais flexível.
sainf
@ 4k4: A |rendernão é suficiente devido a questões de espaço em branco aleatórias de modelos de campo, consulte este link: Verificação de campos vazios em templates Twig é complicado
Mojtaba Reyhani
@MojtabaReyhani: Obrigado, ótimo achado. Encontrado neste link drupal.org/node/2783633#comment-11510195 . Adicionado isso ao código.
4k4 20/09/16
4

Verifique se o campo não está vazio no modelo de galho ( coleção de campos ).
Modelo : campo-coleção-item - campo-serviços.html.twig

Instale o Módulo Field Twig Value para obter o valor usando " | field_value ", seguido por " não está vazio "

{% if content.field_work|field_value is not empty %}

       ...

{% endif %} 
Alberto Galvis
fonte
1
{% if not (node.field_whatever.isEmpty == true) and content.field_whatever is defined %}
  <div class="whatever_markup">
    {{ content.field_whatever }}
  </div>
{% endif %}

Essa solução é bastante à prova de balas e até funciona em modelos reutilizados e / ou compartilhados (por exemplo, um compartilhado entre node--teaser.html.twigvários pacotes configuráveis ) porque

  • funciona para todos os tipos de campo
  • verifica se o campo existe
  • verifica se o campo não está vazio
  • verifica se o campo não está oculto no modo de exibição

O duplo negativo not ...isEmpty == trueé necessário, caso contrário, um campo inexistente falharia na verificação. Também acredito que minha solução é muito mais rápida e resistente a erros do que qualquer verificação que envolva a renderização do campo.

Isso deve funcionar para qualquer modelo de entidade, por exemplo, você pode simplesmente substituí node.field_xxx-lo paragraph.field_xxxpor um paragraph.html.twigarquivo de modelo

Hudri
fonte