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
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
}
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.
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]))
où field_name
correspond au nom du champ souhaité.
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 ...
}