Można pobrać elementy pola z encji za pomocą
// Find all terms on $node in field 'field_tags'.
$terms = field_get_items('node', $node, 'field_tags');
Ale czy istnieje wygodny sposób na wykonanie czynności odwrotnej, Core lub w inny sposób?
// 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);
Chciałbym uniknąć kłopotów z ręcznym przypisywaniem terminu $, przyjrzyj się, jak wygląda struktura tablicy, a następnie zbuduj tablicę ręcznie, ponieważ czasami nie jest to trywialne.
Jedyny problem w kolejce podstawowej, który mogłem znaleźć, który wyglądał nieco podobnie, dotyczył języka polowego API DX .
Aby taka funkcja istniała,
field_set_items()
musiałaby być w stanie zidentyfikowaćstdClass
obiekt jako termin taksonomii, a także odwzorować go na funkcję, która może dekodować obiekt i utworzyć z niego tablicę pól.Ponieważ nie ma do tego podstawowej funkcji, nie sądzę, że będzie to łatwe.
źródło
entity_type
problemu tak naprawdę nie jest problemem IMHO ... problemem jest dokładnie to, co dodałeś do swojego pytania: „czasem nie jest trywialne”. Ponieważ dane nie są trywialne,field_set_items
aby działały tak, jak chcesz, każdy typ pola w systemie musiałby zaimplementować jakiś interfejs opisujący sposób inżynierii wstecznej tablicy danych na podstawie zmiennej obiektowej / arbitralnej.Chociaż nie pomaga to w budowaniu czasami skomplikowanej struktury tablic, widzę, że to, czego szukam, do pewnego stopnia zostało wprowadzone w Drupal 8. Być może zostanie ono w przyszłości rozszerzone. :)
Dostępne nowe, prostsze API umożliwiające dostęp do pól, właściwości i informacji o języku .
Przykładowe użycie z połączonej strony:
źródło