Điểm:0

Cách nối thêm các trường vào đối tượng nút theo chương trình khi sao chép bằng createDuplicate()

lá cờ in

Tôi đang cố gắng thiết lập một mô-đun tùy chỉnh để sao chép các giá trị từ một nút có loại nội dung là Một đến một nút có loại nội dung là b. Phần lớn, các kiểu nội dung có các trường giống nhau, nhưng b có một vài lĩnh vực bổ sung.

Một

  • Tiêu đề (tiêu đề)
  • Cơ thể (cơ thể)
  • Ngày (trường_ngày_chương trình nghị sự)

b

  • Tiêu đề (tiêu đề)
  • Cơ thể (cơ thể)
  • Ngày (trường_ngày_chương trình nghị sự)
  • Số mục (field_int_how_many)
  • Tham chiếu đến Một (trường_noderef_nta)

Với $cloned_node = $node->createDuplicate() Tôi có thể sao chép tất cả các trường từ Một, cũng như có thể thay đổi loại nội dung thành b.
Từ Một không có các trường bổ sung được đính kèm, tạo Duplicate() sẽ không sao chép chúng.

Bây giờ, điều tôi muốn làm là thêm các trường khác theo chương trình (mà tôi sẽ điền một số giá trị tùy chỉnh) vào $clone_node. Khi những hành động này được hoàn thành, $cloned_node->save() sẽ được sử dụng để hoàn thiện quá trình nhân bản.

Đơn giản chỉ cần thêm giá trị thông qua $cloned_node->set("field_int_how_many", $value) dường như không thực hiện được mẹo: Đã xảy ra lỗi PHP.

UnlimitedArgumentException: Trường field_int_how_many không xác định. trong Drupal\Core\Entity\ContentEntityBase->getTranslatedField() (dòng 587 của /home/username/domains/domainname.com/public_html/devsite/web/core/lib/Drupal/Core/Entity/ContentEntityBase.php).

Có ai có ý tưởng làm thế nào để thêm các trường bổ sung đó vào nút nhân bản không?

Điểm:3
lá cờ us

Nếu loại nội dung của nút $Một, loại nội dung của nút được trả về bởi $node->createDuplicate() vẫn còn Một. đó là lý do tại sao $node->createDuplicate()->set("field_int_how_many", $value) trả về một lỗi nói rằng trường_int_how_many là một trường không xác định: Loại nội dung Một không có lĩnh vực đó.

Những gì bạn đang cố gắng để có được không phải là một bản sao của nút $, nhưng để sao chép các giá trị từ một nút có kiểu nội dung là Một đến một nút có loại nội dung là b.
Để làm được điều đó, bạn cần tạo một nút mới, chuyển các giá trị của trường nút hiện có làm giá trị cho các trường nút mới.

$new_node = Nút::tạo(
  'loại' => 'B',
  'tiêu đề' => $node->tiêu đề,
  'body' => $node->body,
  'field_date_agenda' => $node->field_data_agenda,
  'field_int_how_many' => /* giá trị gán cho trường */
);
lá cờ in
Cảm ơn bạn rất nhiều vì câu trả lời nhanh chóng và rõ ràng của bạn. Tôi sẽ cho nó một đi.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.