Программное создание и обновление полей типа field collection

http://stillfinder.net/ru/blog/programmnoe-sozdanie-i-obnovlenie-poley-tipa-field-collection

https://drupal.ru/node/107454

Field Collection - удобный модуль, который позволяет создавать составные поля, То есть поля, которые содержат внутри себя другие поля. Например, это может быть поле, состоящее из двух разных полей - термина таксономии и числовое поле. В этой статье мы поговорим о программном создании экземпляров field collection добавлении их к ноде, а также, о программном редактировании Field Collection в Drupal.

Предположим, что у нас есть нода с id 10, и нам нужно добавить к ней поле типа field_collection, состоящее из полей field_collection_field1 и field_collection_field2.

$node = node_load(10);

$field_collection_item = entity_create('field_collection_item', array('field_name' => 'field_collection_name')); // field_collection_name заменяем на название своего поля типа field collection
$field_collection_item->setHostEntity('node', $node);  

$field_collection_item->field_collection_field1[LANGUAGE_NONE][0]['tid'] = 'Значение первого составного поля';
$field_collection_item->field_collection_field2[LANGUAGE_NONE][0]['value'] = 'Значение второго составного поля';
$field_collection_item->save();

Для обновления значения существующего поля типа field collection ноды с nid 10 используем следующий код:

<span style="color: #000088;">$node</span> <span style="color: #339933;">=</span>node_load<span style="color: #009900;">(</span><span style="color: #cc66cc;">10</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Получаем значение поля field collection</span>
<span style="color: #000088;">$field_collection_item_value</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_collection1</span><span style="color: #009900;">[</span>LANGUAGE_NONE<span style="color: #009900;">]</span><span style="color: #009900;">[</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">]</span><span style="color: #009900;">[</span><span style="color: #0000ff;">'value'</span><span style="color: #009900;">]</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Загружаем экземпляр field collection и изменяем его значение</span>
<span style="color: #000088;">$field_collection_value</span> <span style="color: #339933;">=</span> entity_load<span style="color: #009900;">(</span><span style="color: #0000ff;">'field_collection_item'</span><span style="color: #339933;">,</span> <a href="https://web.archive.org/web/20190915220628/http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">(</span><span style="color: #000088;">$field_collection_item_value</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
 <span style="color: #000088;">$field_collection_value</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_collection1</span><span style="color: #009900;">[</span>LANGUAGE_NONE<span style="color: #009900;">]</span><span style="color: #009900;">[</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">]</span><span style="color: #009900;">[</span><span style="color: #0000ff;">'value'</span><span style="color: #009900;">]</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'updated value here'</span><span style="color: #339933;">;</span>
&nbsp;
 <span style="color: #666666; font-style: italic;">// Сохраняем изменения</span>
<span style="color: #000088;">$field_collection_value</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">save</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>

Для удаления существующего field collection поля используем следующий код:

<span style="color: #000088;">$node</span> <span style="color: #339933;">=</span> node_load<span style="color: #009900;">(</span><span style="color: #cc66cc;">10</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Получаем значение поля.</span>
<span style="color: #000088;">$field_collection_item_value</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$node</span><span style="color: #339933;">-</span>?<span style="color: #339933;">--&gt;</span><span style="color: #004000;">field_collection1</span><span style="color: #009900;">[</span>LANGUAGE_NONE<span style="color: #009900;">]</span><span style="color: #009900;">[</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">]</span><span style="color: #009900;">[</span><span style="color: #0000ff;">'value'</span><span style="color: #009900;">]</span><span style="color: #339933;">;</span>
&nbsp;
 <span style="color: #666666; font-style: italic;">// Удаляем экземпляр поля.</span>
entity_delete_multiple<span style="color: #009900;">(</span><span style="color: #0000ff;">'field_collection_item'</span><span style="color: #339933;">,</span> <a href="https://web.archive.org/web/20190915220628/http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">(</span><span style="color: #000088;">$field_collection_item_value</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
Связаться с автором Поддержать автора (что?)

Комментарии

Если у вас есть вопрос, критика или другое мнение - напишите в комментариях.