Небольшой ликбез по field_collection

Главные вкладки

Аватар пользователя roman-yrv roman-yrv 13 марта 2013 в 20:17

Добрый день.

Никто не может подсказать, где можно найти ликбез по программной работе с модулем field_collection ?

То есть, допустим, есть нода с определенным nid, у неё есть поле типа field_collection с определенным названием, которое, в свою очередь, содержит другие поля и т.д.

И хотелось бы узнать примеры функций, с помощью которых можно было бы проводить стандартные операции с этим полем - получать его значения, изменять его значения, добавлять, удалять и т.д.

По документации, описанной на сайте http://drupalcontrib.org, все-таки сложновато с этим разобраться.
А работать напрямую через SQL-запросы как-то тоже считаю неправильным.

Комментарии

Аватар пользователя roman-yrv roman-yrv 13 марта 2013 в 21:26

Не совсем так.

Вот, например, есть нода с nid=15 и у неё есть поле типа field_collection и с названием field_fc1, это поле содержит свои поля.

следующий код

$nd=node_load(15);
kpr($nd->field_fc1['ru'][0]['value']);

вернет число - идентификатор сущности entity_id, у которой entity_type будет равным field_collection_item, а bundle будет равен field_fc1.

И с помощью каких функций я могу добраться до полей, из которых состоит данное поле field_fc1 ?

Например, если у данного поля есть вложенное поле с названием field_str, то как я смогу узнать его значение ?

Аватар пользователя roman-yrv roman-yrv 13 марта 2013 в 22:11

Спасибо большое, решил задачу двумя способами
Может быть, кому-нибудь пригодится.

Способ 1.

// Загружаем ноду
$nd=node_load($nid);

// Получаем entity_id данной сущности
$ent_id=$nd->field_fc1['ru'][0]['value'];

// Загружаем сущность
$ent=entity_load('field_collection_item',array($ent_id));

// Добираемся до значения поля
print($ent[$ent_id]->field_str[$node->language][0]['value']);

Способ 2.

$wrapper=entity_metadata_wrapper('node',$nid);
print($wrapper->field_fc1->value()->field_str[$node->language][0]['value']);
Аватар пользователя DJLocksmith DJLocksmith 21 июня 2013 в 15:21

roman-yrv wrote:
Спасибо большое, решил задачу двумя способами
Может быть, кому-нибудь пригодится.

Способ 1.

// Загружаем ноду
$nd=node_load($nid);

// Получаем entity_id данной сущности
$ent_id=$nd->field_fc1['ru'][0]['value'];

// Загружаем сущность
$ent=entity_load('field_collection_item',array($ent_id));

// Добираемся до значения поля
print($ent[$ent_id]->field_str[$node->language][0]['value']);

Способ 2.

$wrapper=entity_metadata_wrapper('node',$nid);
print($wrapper->field_fc1->value()->field_str[$node->language][0]['value']);

Спасибо направление!
У меня в ноде есть филд колкешн в котром есть еще один филд колекшн и последний имеет неограниченное кол-во значений. там дата и цена. мне нужно выбрать из них только тот который совпадает с сегодняшней датой и вывести его. понимаю что нужен цикл. буду благодарен за подсказку. спасибо)

Аватар пользователя DJLocksmith DJLocksmith 21 июня 2013 в 16:15

DJLocksmith wrote:
roman-yrv wrote:
Спасибо большое, решил задачу двумя способами
Может быть, кому-нибудь пригодится.

Способ 1.

// Загружаем ноду
$nd=node_load($nid);

// Получаем entity_id данной сущности
$ent_id=$nd->field_fc1['ru'][0]['value'];

// Загружаем сущность
$ent=entity_load('field_collection_item',array($ent_id));

// Добираемся до значения поля
print($ent[$ent_id]->field_str[$node->language][0]['value']);

Способ 2.

$wrapper=entity_metadata_wrapper('node',$nid);
print($wrapper->field_fc1->value()->field_str[$node->language][0]['value']);

Спасибо направление!
У меня в ноде есть филд колкешн в котром есть еще один филд колекшн и последний имеет неограниченное кол-во значений. там дата и цена. мне нужно выбрать из них только тот который совпадает с сегодняшней датой и вывести его. понимаю что нужен цикл. буду благодарен за подсказку. спасибо)

Разобрался))) спасибо)))