Verifica che un campo non sia vuoto


15

Qual è il metodo migliore per verificare se un campo è vuoto in un modello di nodo.

Nel nodo - esempio.html.twig possiamo usare la variabile "contenuto".

Non posso usare il controllo come controllare un blocco

{% if content.field_example  %}

Posso usare qualcosa del genere:

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

Ma qual è il metodo migliore?


1
Usa hook_preprocess e controlla a livello di codice, magari aggiungi una variabile indicatore. Altrimenti ciò che 4k4 ha scritto.

Risposte:


21

Come ho scritto anche in Come è possibile eseguire il rendering dei campi da un riferimento di entità nei modelli di nodo? [Drupal 8] , il contenuto è un array di rendering che contiene dati preparati per la visualizzazione.

Se si desidera verificare o confrontare qualcosa, utilizzare invece i valori disponibili sull'oggetto nodo.

{% if node.field_example.value %}.

Si noti che la proprietà dipende dal tipo di campo. Se è un campo di riferimento, devi utilizzare invece target_id. La domanda a cui si fa riferimento si collega a un cheat sheet dell'API di campo di entità che elenca i tipi di campi comuni e le loro proprietà.


Per il campo immagine {% node.field_article_image.target_id%}
Yogesh Kushwaha,

13

Non puoi essere sicuro della struttura dell'array di rendering all'interno del contenuto, quindi questo non è il metodo migliore.

Questa potrebbe essere una soluzione migliore:

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

Questo controlla se il rendering del campo genera output.

Ma questo dipende da come hai configurato il formato del campo e cosa cerchi di fare. Ad esempio, potresti aver configurato per visualizzare un'etichetta se il campo è vuoto. Quindi devi regolare questo. Se non si dipende dall'output di rendering e si desidera solo verificare, se il campo ha un valore nel database, utilizzare l'oggetto nodo. Vedi la risposta di Berdir.


Considero Berdir la risposta giusta perché è più flessibile.
sainf,

@ 4k4: |rendernon è sufficiente a causa di problemi casuali di spazi bianchi dai modelli di campo, Vedi questo link: Il controllo dei campi vuoti nei modelli di ramoscelli è complicato
Mojtaba Reyhani,

@MojtabaReyhani: Grazie, ottima scoperta. Ho trovato questo link drupal.org/node/2783633#comment-11510195 . Aggiunto questo al codice.
4k4,

4

Controlla se il campo non è vuoto nel modello di ramoscello ( Raccolta campi )
Modello : field-collection-item - field-services.html.twig

Installa Field Twig Value Module per ottenere il valore utilizzando " | field_value ", seguito da " non è vuoto "

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

       ...

{% endif %} 

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

Questa soluzione è abbastanza a prova di proiettile e funziona anche in modelli riutilizzati e / o condivisi (ad es. Uno condiviso node--teaser.html.twigattraverso più bundle) perché

  • funziona per tutti i tipi di campo
  • controlla se il campo esiste
  • controlla se il campo non è vuoto
  • controlla se il campo non è nascosto nella modalità di visualizzazione

Il doppio negativo not ...isEmpty == trueè necessario, altrimenti un campo inesistente fallirebbe il controllo. Credo anche che la mia soluzione sia molto più veloce e resistente agli errori rispetto a qualsiasi controllo che comporti il ​​rendering del campo.

Questo dovrebbe funzionare per qualsiasi modello di entità, ad esempio puoi semplicemente sostituirlo node.field_xxxcon paragraph.field_xxxin un paragraph.html.twigfile modello

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.