Je commence à utiliser ce formulaire pour accéder aux données de mon module. (Voir commentaire n ° 1. )
$node->field_test[$node->language][0]['value']
Je pensais que cela semblait être une très bonne solution, mais un peu plus loin, j'ai trouvé ceci :
Ne supposez pas que 'und' concerne les champs d'entités sans langage, mais également pour les champs qui ne sont pas traduisibles, et sans le module de traduction d'entité qui comprend tous les champs. De plus, il existe des différences entre les différentes versions 7.x de Drupal.
Mieux vaut utiliser lafield_get_items()
fonction qui trie pour vous sous quel code de langue les données sont stockées.
Et maintenant, je ne sais pas si ce que j'utilise pourrait casser quelque chose sur la route.
entity_metadata_wrapper()
est-elle obsolète? J'ai essayé d'appeler cela dans mon module, et j'ai obtenuFatal error: Call to undefined function entity_metadata_wrapper()
- j'ai également effectué une recherche de source sur mon installation de Drupal 7.12 dans Dreamweaver , et j'ai obtenu 0 résultats ailleurs dans le code!$node->field_name[LANGUAGE_NONE][0]['value'] = 'foo';
soit vraiment le moyen le plus efficace.Pour la lecture, vous devriez toujours pouvoir utiliser field_get_items () , qui choisira la langue qui vous convient et vérifiera également si le champ contient des valeurs.
Malheureusement, l'API de champ est très limitée dans 7.x, il n'y a aucun moyen d'obtenir, par exemple, le premier élément de champ, n'osez même pas demander d'obtenir la valeur avec un seul appel de fonction ... Et il n'y a pas de champ_set_items ( ) contrepartie.
Alors oui, le module API entité ne fournir une API plus agréable avec l'inconvénient qu'il est également livré avec un peu de frais généraux (Il convertit fondamentalement chaque valeur unique aux objets wrapper qui ont des tonnes de tableaux d'information de propriété imbriquées qui leur sont rattachés). Essayer de vider une enveloppe d'entité ne vous apportera généralement rien ou un mur de tableaux illisibles.
la source
la source