Puncte:0

Cum să adăugați în mod programatic câmpuri la obiectul nod atunci când clonați cu createDuplicate()

drapel in

Încerc să configurez un modul personalizat care copiază valori dintr-un nod al cărui tip de conținut este A la un nod al cărui tip de conținut este B. În cea mai mare parte, tipurile de conținut au aceleași câmpuri, dar B are câteva câmpuri suplimentare.

A

  • Titlu (titlu)
  • corp (corp)
  • Data (field_date_agenda)

B

  • Titlu (titlu)
  • corp (corp)
  • Data (field_date_agenda)
  • Număr de articole (field_int_how_many)
  • Trimitere la A (field_noderef_nta)

Cu $cloned_node = $node->createDuplicate() Pot copia toate câmpurile din A, precum și posibilitatea de a schimba tipul de conținut în B.
De cand A nu are câmpurile suplimentare atașate, createDuplicate() nu le va copia.

Acum, ceea ce aș dori să fac este să adaug în mod programatic celelalte câmpuri (pe care le voi completa cu niște valori personalizate) la $cloned_node. Când aceste acțiuni sunt finalizate, $cloned_node->salvare() va fi folosit pentru finalizarea procesului de clonare.

Pur și simplu adăugați valoarea prin $cloned_node->set("field_int_how_many", $value) nu pare să facă treaba: se afișează o eroare PHP.

InvalidArgumentException: Câmpul field_int_how_many este necunoscut. în Drupal\Core\Entity\ContentEntityBase->getTranslatedField() (linia 587 din /home/username/domains/domainname.com/public_html/devsite/web/core/lib/Drupal/Core/Entity/ContentEntityBase.php).

Are cineva idee cum să adauge acele câmpuri suplimentare la nodul clonat?

Puncte:3
drapel us

Dacă tipul de conținut al $node este A, tipul de conținut al nodului returnat de $node->createDuplicate() inca este A. De aceea $nod->createDuplicate()->set("field_int_how_many", $value) returnează o eroare care spune că field_int_how_many este un câmp necunoscut: tip de conținut A nu are acel domeniu.

Ceea ce încerci să obții nu este o clonă $node, ci pentru a copia valorile dintr-un nod al cărui tip de conținut este A la un nod al cărui tip de conținut este B.
Pentru aceasta, trebuie să creați un nou nod, trecând valorile câmpului de nod existent ca valori pentru noile câmpuri de nod.

$new_node = Node::create(
  'type' => 'B',
  'title' => $node->titlu,
  'body' => $node->corp,
  'field_date_agenda' => $node->field_data_agenda,
  'field_int_how_many' => /* valoarea de atribuit câmpului */
);
drapel in
Vă mulțumesc foarte mult pentru răspunsul dumneavoastră rapid și clar. O să-i dau o încercare.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.