Продолжаю создавать хинты по работе с модулем Field Collection. Сегодня поделюсь примером кода, создающего новый объект field collection. Пример для Drupal 7.
Есть поле в публикации типа «дистрибьюторы» — field_addr типа field collection. Коллекция состоит из таких полей как адрес, телефон, гео-координаты, ссылки на таксономию и т.п.
Пример структуры данного объекта field_collection:
Я хочу из кода создавать дополнительные адреса для нужного дистрибьютора (например, для реализации импорта данных).
Я буду использовать entity API. Особенностью entity field_collection является необходимость создания связи с родительским объектом. В моём примере это объект типа node, но может быть и любой другой тип entity.
1 2 |
$addrFC = entity_create('field_collection_item', array('field_name' => 'field_addr')); $addrFC->setHostEntity('node', $node); |
Дальше можно заняться загрузкой данных. Здесь ничего необычного — всё работает как и для любой другой entity.
1 2 3 4 5 6 |
// пример данных для текстового поля $addrFC->field_city[LANGUAGE_NONE] = array(0 => array('value' => 'Воркута')); $addrFC->field_address[LANGUAGE_NONE] = array(0 => array('value' => 'пр. Ленина, 11')); ... // связь с таксономией $addrFC->field_metro[LANGUAGE_NONE] = array(0 => array('tid' => $MetroTid )); |
Когда данные сформированы, остаётся лишь сохранить объект в базе данных:
1 |
$addrFC->save(); |