Можно извлечь элементы поля из объекта с
// Find all terms on $node in field 'field_tags'.
$terms = field_get_items('node', $node, 'field_tags');
Но есть ли удобный способ сделать обратное, Core или как-то иначе?
// 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);
Я хотел бы избежать хлопот, связанных с ручным назначением $ term, посмотрите в devel, как выглядит структура массива, а затем создайте массив вручную, поскольку это иногда бывает нетривиально.
Единственная проблема в основной очереди, которую я мог найти, которая выглядела немного похожей, была о языке интерфейса API DX .
Чтобы такая функция существовала,
field_set_items()
необходимо иметь возможность идентифицироватьstdClass
объект как термин термина таксономии, а также сопоставить его с функцией, которая может декодировать объект и создать из него массив полей.Поскольку для этого нет основной функции, я не думаю, что это будет легко.
источник
entity_type
самом деле проблема не в отсутствии ИМХО ... проблема именно в том, что вы добавили в свой вопрос: «иногда это нетривиально». Поскольку данные нетривиальны, для того,field_set_items
чтобы работать по вашему желанию, каждый тип поля в системе должен был бы реализовать своего рода интерфейс, описывающий, как выполнить обратный инжиниринг массива данных из объекта / произвольной переменной.Хотя это не помогает в создании иногда сложной структуры массива, я вижу, что то, что я ищу, в некоторой степени было представлено в Drupal 8. Возможно, оно будет расширено в будущем. :)
Доступен новый более простой API для доступа к полям, свойствам и языковой информации .
Пример использования со связанной страницы:
источник