Пример программного создания значения поля field_my_collection
:
// Создаём объект коллекции (сущность типа field_collection_item для поля field_my_collection)
$collection_item = entity_create('field_collection_item', array('field_name' => 'field_my_collection'));
// Указываем родительскую сущность коллекции, например ноду c nid 123
$host_entity = node_load(123);
$collection_item->setHostEntity('node', $host_entity);
// Создаём враппер для коллекции
$collection_item_wrapper = entity_metadata_wrapper('field_collection_item', $collection_item);
// Заполняем поля у коллекции
$collection_item_wrapper->field_my_text_field = 'my test';
$collection_item_wrapper->field_my_term_field = 234;
// Сохраняем коллекцию
$collection_item_wrapper->save(TRUE);
Написанное актуально для
Drupal 7
Похожие записи
Комментарии
После всего этого, ноду тоже нужно сохранить.
Нет, в данном случае не нужно.
Вот так вот работает ;-)
У меня с враппером ни чего не получилось - ошибка:
EntityMetadataWrapperException: Invalid data value given. Be sure it matches the required data type and format. в функции EntityMetadataWrapper->set()
Нашел ещё хороший код https://www.drupal.org/node/1842304#comment-9295475
Спасибо! Мне очень помогло.
А как программно удалить добавленное? Мне надо реализовать обновление по крону, которое должно заменять значения, но сейчас оно только бесконечно добавляет.
так же как и значение любого поля
ок, спасибо
А без node_save можно как-то обойтись при удалении значений filed collection? Дело в том что мне надо почистить добавленные в ноду field collection и выполнить код по их добавлению за один запуск php правила rules. Если использовать node_save, все что дальше игнорируется. Может быть можно как то использовать $collection_item->save(); при удалении..
попробуйте $collection_item->delete()
А, все, можно не отвечать, просто надо было удалить node_save, рулс же сам сохраняет по окончании. В моем случае код такой:
$field_name = 'field_source';
$fc_items = field_get_items('node', $node, $field_name);
if (!isset($fc_items[0])) return;
foreach ($fc_items as $fc_item) {
entity_delete_multiple('field_collection_item', array($fc_item['value']));
}
$node->{$field_name} = array();
// node_object_prepare($node);
// node_save($node);
Спасибо :)
Xandeadx у меня так же как и у Игоря (ссылка на комент) возникала ошибка с кодом из статьи.
Кажется код Игоря более универсальный. Ваш код работал пока я создавал только текстовые поля, но когда я попытался создать Коллекцию с полем типа "Длинный текст" (многострочное текстовое поле) - возникала ошибка.
Добавить комментарий