On peut récupérer des éléments de champ d'une entité avec
// Find all terms on $node in field 'field_tags'.
$terms = field_get_items('node', $node, 'field_tags');
Mais existe-t-il un moyen pratique de faire l'inverse, Core ou autre?
// Attach new term $term to $node in field 'field_tags'.
$term = taxonomy_term_load($tid);
$node = field_set_items('node', $node, 'field_tags', 'taxonomy_term', $term);
node_save($node);
Je voudrais éviter les tracas de l'attribution manuelle d'un $ term, allez voir à quoi ressemble la structure du tableau, puis construisez le tableau à la main, car il est parfois non trivial.
Le seul problème dans la file d'attente principale que j'ai pu trouver qui semblait vaguement similaire concernait l' api DX en langage de terrain .
Pour qu'une telle fonction existe,
field_set_items()
il faudrait pouvoir identifier l'stdClass
objet comme celui d'un terme de taxonomie, et également le mapper à une fonction qui peut décoder l'objet et en créer un tableau de champs.Puisqu'il n'y a pas de fonction de base pour le faire, je ne pense pas que ce sera facile.
la source
entity_type
n'est pas vraiment le problème à mon humble avis ... le problème est exactement ce que vous avez ajouté à votre question: "il est parfois non trivial". Parce que les données ne sont pas triviales, pourfield_set_items
fonctionner comme vous le souhaitez, chaque type de champ dans le système devrait implémenter une sorte d'interface décrivant comment procéder à une rétro-ingénierie du tableau de données à partir d'un objet / d'une variable arbitraire.Bien que cela n'aide pas à construire la structure de tableau parfois compliquée, je vois que ce que je recherche a été dans une certaine mesure introduit dans Drupal 8. Peut-être qu'il sera étendu à l'avenir. :)
Nouvelle API plus simple disponible pour accéder aux champs, aux propriétés et aux informations sur la langue .
Exemple d'utilisation de la page liée:
la source