Пример кода, как программно реализовать создание параграфа (речь идет о модуле — paragraphs).
Обычно параграфы создаются редакторами через админку, но иногда требуется создать новый параграф с помощью кода, например, при импорте данных, структурных изменениях проекта и т.п.
Самый простой случай — создание нового элемента. Рассмотрим пример кода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// Пусть поле с параграфами создано для какого типа публикаций, ноды.. // Загрузим объект публикации, он нам пригодится позднее $node = node_load($NID); // Создание нового параграфа // Нужно знать т.н. 'machine name' типа параграфа (bundle) // и имя поля типа paragraphs в вашей публикации: $paragraph = new ParagraphsItemEntity(array( 'bundle' => 'PARAGRAPH_BUNDLE_NAME', 'field_name' => 'field_PARAGRAPHS_NAME') ); $paragraph->is_new = TRUE; // связываем параграф с публикаций $paragraph->setHostEntity('node', $node); // заполняем поля параграфа $paragraph->field_FIELD1 = ...; $paragraph->field_FIELD2 = ...; ... // сохраняем параграф $paragraph->save(); |
Чуть более сложный пример создания параграфов — копирование данных параграфов из одного host-поля в другое. Т.е. задача создать копию параграфов, взяв данные существующих параграфов в другом host-FIELD.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
// Загрузим объект публикации $node = node_load($NID); // Источником данных в нашем примере // будет поле объекта congig_pages $i = 0; while ($p_id = config_pages_get('CONFIG_PAGE_BUNDLE_NAME', 'field_PARAGRAPH_SOURCE', NULL, $i)) { // загрузим данные источника $P = paragraphs_item_load($p_id['value']); // создадим новый параграф $paragraph = new ParagraphsItemEntity(array( 'bundle' => $P->bundle, 'field_name' => 'field_PARAGRAPHS_DEST') ); $paragraph->is_new = TRUE; $paragraph->setHostEntity('node', $node); // скопируем значения полей foreach($P as $key => $value) { if (strpos($key, 'field_') === 0 && $key != 'field_name') { $paragraph->{$key} = $value; } } // сохраним параграф $paragraph->save(); $i++; } |