Рейтинг:0

Как программно добавлять поля к объекту узла при клонировании с помощью createDuplicate()

флаг in

Я пытаюсь настроить пользовательский модуль, который копирует значения из узла, тип содержимого которого А к узлу, тип содержимого которого Б. По большей части типы контента имеют одни и те же поля, но Б имеет несколько дополнительных полей.

А

  • Название (название)
  • Тело (тело)
  • Дата (field_date_agenda)

Б

  • Название (название)
  • Тело (тело)
  • Дата (field_date_agenda)
  • Количество элементов (field_int_how_many)
  • Ссылка на А (field_noderef_nta)

С $cloned_node = $node->createDuplicate() Я могу скопировать все поля из А, а также возможность изменить тип контента на Б.
С А к нему не прикреплены дополнительные поля, создать дубликат () не будет их копировать.

Теперь я хотел бы программно добавить другие поля (которые я заполню некоторыми пользовательскими значениями) в $cloned_node. Когда эти действия завершены, $cloned_node-> сохранить() будет использоваться для завершения процесса клонирования.

Просто добавив значение через $cloned_node->set("field_int_how_many", $value) похоже, не помогает: выдается ошибка PHP.

InvalidArgumentException: поле field_int_how_many неизвестно. в Drupal\Core\Entity\ContentEntityBase->getTranslatedField() (строка 587 файла /home/username/domains/domainname.com/public_html/devsite/web/core/lib/Drupal/Core/Entity/ContentEntityBase.php).

Кто-нибудь знает, как добавить эти дополнительные поля в клонированный узел?

Рейтинг:3
флаг us

Если тип содержимого $узел является А, тип содержимого узла, возвращаемый $узел->создатьДубликат() все еще А. Вот почему $node->createDuplicate()->set("field_int_how_many", $value) возвращает ошибку о том, что field_int_how_many неизвестное поле: Тип контента А нет этого поля.

То, что вы пытаетесь получить, не является клоном $узел, но чтобы скопировать значения из узла, тип содержимого которого А к узлу, тип содержимого которого Б.
Для этого вам нужно создать новый узел, передав значения существующего поля узла в качестве значений для новых полей узла.

$new_node = узел::создать(
  'тип' => 'Б',
  'название' => $узел->название,
  'тело' => $узел->тело,
  'field_date_agenda' => $node->field_data_agenda,
  'field_int_how_many' => /* значение для присвоения полю */
);
флаг in
Большое спасибо за ваш быстрый и четкий ответ. Я попробую.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.