Подскажите как работать с модулем Paragraphs на программном уровне?
Например есть страница ноды (type1), на которой должны подтягиваться другие ноды (type2) с параграфами.
Известны айди нужных нод.
<?php$nodes = node_load_multiple($array_nodes_id);?>
Через функцию node_load_multiple объекты содержат только айди параграфов.
Мне нужны все поля ноды, вместе полями параграфов.
Кроме того потребуется программное создание\изменение нод типа type2. Например тут есть код сохранения для drupal8:
<?php$paragraph = \Drupal\paragraphs\Entity\Paragraph::create([
'type' => 'image_text',
'field_description' => array(
"value" => 'My description',
),
'field_image' => array(
"target_id" => $file->id(),
"alt" => "docteur portrait",
"title" => "docteur portrait",
),
]);
$paragraph->save();
$node->field_page_content->appendItem($paragraph);
$node->save();?>
Как его адаптировать для drupal7?
Комментарии
Больно, обидно и унизительно.
Ищите про EntityMetatateWrapper.
Соображайте, с привлечением его, зацикленные циклы, необходимой вложенности.
Обмазывайтесь кучей необходимых проверок, которые Вам придется дублировать по логике используемых сущностей.
Спасибо! вроде разобрался
Получилось както так.
Создание новой ноды:
<?php
// сначала создаем ноду с обычными полями
$node = new stdClass();
$node->type = 'review';
node_object_prepare($node);
$node->title = 'Создание ноды';
$node->language = 'ru';
$node->body[LANGUAGE_NONE][0]['value'] = 'Содержание ноды';
$node->body[LANGUAGE_NONE][0]['summary'] = 'Текст анонса';
$node->body[LANGUAGE_NONE][0]['format'] = 'user_format';
$node->uid = 1;
$node->status = 1;
node_save($node);
$paragraph = new ParagraphsItemEntity(array('field_name' => 'field_answer', 'bundle' => 'comment'));
$paragraph->is_new = TRUE;
$paragraph->setHostEntity('node', $node);
$paragraph->field_comment_author[LANGUAGE_NONE][0]['value'] = 'text';
$paragraph->field_comment_text[LANGUAGE_NONE][0]['format'] = 'user_format';
$paragraph->field_comment_text[LANGUAGE_NONE][0]['value'] = 'text';
$paragraph->save();
?>
с получением полей не совсем понял как оно так получилось. Изначально сработала такая вещь:
<?php
$wrapper = entity_metadata_wrapper('node', 55); // где 55 - это айди ноды
print $wrapper->field_city->value(); // обычное поле
print $wrapper->field_answer->field_date->value(); // поле параграфа
?>
После того как я научился создавать новые ноды с параграфми, код выше перестал работать. Ругается мол нет такого свойства field_date. В этом то и проявилась "боль с обидой :))"
Изначально у меня был всего один экземпляр параграфа на всем сайте, а затем появлись и другие. Судя по всему изза этого работало и потом перестало работать.
В итоге понял что надо специально грузить сущность параграфа по айди, указанному в поле field_answer ноды.
получилось так:
Получить поля параграфов:
<?php
// 14 это айди экземпляра параграфа
$wrapper = entity_metadata_wrapper('paragraphs_item', 14);
print $wrapper->field_comment_text->value();
?>
Соответственно с изменением полей параграфов так же.
<?php
// сначала работало так, потом перестало.
$wrapper = entity_metadata_wrapper('node', $node);
$wrapper->field_answer->field_date = 12999999;
$wrapper->save();
?>
Рабочий вариант сохранения полей:
<?php
$wrapper = entity_metadata_wrapper('paragraphs_item', 1);
$wrapper->field_date=12999999;
$wrapper->save();
?>
В принципе кучи проверок вроде пока нету. Есть только цикл в цикле, чтобы вывести нормально)