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

Аватар пользователя stillfinder stillfinder 5 февраля 2014 в 19:43

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

Предположим, что у нас есть нода с id 10, и нам нужно добавить к ней поле типа field_collection, состоящее из полей field_collection_field1 и field_collection_field2.
<?php
$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 используем следующий код:
<?php
$node =node_load(10);

// Получаем значение поля field collection
$field_collection_item_value = $node->field_collection1[LANGUAGE_NONE][0]['value'];

// Загружаем экземпляр field collection и изменяем его значение
$field_collection_value = entity_load('field_collection_item', array($field_collection_item_value));
$field_collection_value->field_collection1[LANGUAGE_NONE][0]['value'] = 'updated value here';

// Сохраняем изменения
$field_collection_value->save();
?>

Для удаления существующего field collection поля используем следующий код:
<?php
$node = node_load(10);

// Получаем значение поля.
$field_collection_item_value = $node-?-->field_collection1[LANGUAGE_NONE][0]['value'];

// Удаляем экземпляр поля.
entity_delete_multiple('field_collection_item', array($field_collection_item_value));
?>

Оригинал статьи в моем блоге

0 Thanks

Комментарии