web-dev-qa-db-fra.com

Vérifiez si un champ est vide

Comment vérifier qu'un champ est vide, quand on a l'objet $ node?.

J'ai trouvé cela comme solution possible:

$field = field_get_items('node', $node, 'field_post_image');

Je peux vérifier maintenant:

MISE À JOUR . Ups! Ce n'est pas fiable, même si je promets que cela a fonctionné pour moi hier.

isset($field);

mais je me demande s'il y a une meilleure façon.

Éclaire-moi

17
corbacho

Si vous lisez sur la documentation la fonction retourne FALSE s'il n'y a pas de données. isset() échouerait en fait parce que vous affectez FALSE à la variable, donc elle a en fait été définie sur quelque chose. La syntaxe correcte serait:

$field = field_get_items('node', $node, 'field_post_image');
if ($field) {
   //Do something with the field
}
else{
   //There are no results
}
30
Sam152

Vous pouvez utiliser l'extrait de code suivant pour vérifier si un champ est vide.

$info = field_info_field($field_name);
$function = $info['module'] . '_field_is_empty';

if (function_exists($function)) {
  $value = field_get_items('node', $node, $field_name);
  $is_empty = $function($value[0], $info);
}

Ce code est plus sûr, car différents champs sont considérés comme vides dans différentes conditions. Voir, par exemple, la différence entre file_field_is_empty () , number_field_is_empty () et taxonomy_field_is_empty () : taxonomy_field_is_empty() checks la propriété tid du paramètre $item, tandis que number_field_is_empty() vérifie la valeur propriété du même paramètre. Les champs personnalisés peuvent nécessiter une condition plus complexe à vérifier, afin de considérer le champ vide.

La description de hook_field_is_empty () donnée dans la documentation est la suivante:

Définissez ce qui constitue un élément vide pour un type de champ.

8
kiamlaluno

Nous avons trouvé la valeur brute dans ($content['field_name']['#items'][0][value]), afin que vous puissiez déterminer si le champ est vide ou non avec l'expression

(! vide ($ content ['field_name'] ['# items'] [0] [value]))

field_name correspond au nom du champ souhaité.

2
eduardocs

Drupal 8

Si quelqu'un a besoin de la même réponse en D8, c'est ce que je fais pour tester mon domaine:

if ($entity->hasField('field_event_date_start')
  && !$entity->get('field_event_date_start')->isEmpty()) {
  // Do something ...
}
1
Pauleau