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?
Respostas:
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.
fonte
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:
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.
fonte
|render
nã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 é complicadoVerifique 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 "
fonte
Essa solução é bastante à prova de balas e até funciona em modelos reutilizados e / ou compartilhados (por exemplo, um compartilhado entre
node--teaser.html.twig
vários pacotes configuráveis ) porqueO 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
-loparagraph.field_xxx
por umparagraph.html.twig
arquivo de modelofonte