Puncte:0

Cum pot seta în mod programatic un câmp de referință pentru entitate personalizată al unui steag atunci când setez programatic steag-ul?

drapel pe

Câteva detalii: sunt nou în crearea de module Drupal 8/9. Am nevoie ca nodurile unui anumit tip de conținut să fie semnalate automat. Am acest lucru folosind codul de mai jos. Cu toate acestea, steagul implicat are și un câmp personalizat pe care trebuie să îl setez.

  • Este un câmp de referință de entitate (la alt nod)
  • Vreau să setez câmpul de referință al entității personalizate al steagului să aibă aceeași valoare cu an câmpul de referință al entității de pe nodul marcat.

(Acest lucru poate părea un lucru ciudat de făcut. S-ar putea să existe o modalitate mai bună de a îndeplini obiectivele UX. Încă vreau să știu cum să o fac.)

„rf_tweaks” este numele mașinii modulului, „research_note” este tipul de conținut al nodului, iar „research_item” este numele steagului.

utilizați Drupal\node\Entity\Node;

funcția rf_tweaks_node_insert(Nodul $nod) {
  dacă ($nod->bundle() == 'notă_cercetare'){
 $flag = \Drupal::entityTypeManager()->getStorage('flag')->load('research_item');
 \Drupal::service('flag')->flag($flag, $node);
}
}

Există câteva informații grozave la pagina API de semnalizare, dar metodele sunt suficient de diferite încât nu îmi este clar cum să le adaptez la această situație.

Puncte:1
drapel cn

Metoda din ultima linie de cod returnează entitatea „semnalizare”, care reprezintă relația entitate/semnal. Acesta este lucrul pe care trebuie să setați câmpul. de exemplu.

$flag = \Drupal::entityTypeManager()->getStorage('flag')->load('research_item');
$flagging = \Drupal::service('flag')->flag($flag, $node);

$flagging->field_foo->target_id = $node->field_bar->target_id;
$flagging->salvare();

Aceasta implică salvarea entității de semnalare de două ori, așa că, dacă performanța devine vreodată o problemă, este posibil să trebuiască să creați un Semnalizarea entitatea manual și salvați-o pentru a evita lovirea dublă.

drapel pe
Lucrează pentru mine. Foarte apreciat!
drapel pe
Am adăugat cod comentat pentru a încerca să înțeleg ce se întâmplă... mai ales pentru propria mea educație. Două întrebări: 1. O am cam corect? 2. Folosim ->save() pentru a adăuga valoarea câmpului, în loc să folosim serviciul de semnalizare, deoarece utilizarea serviciului ar genera o altă semnalizare în loc să o modificăm pe cea actuală?

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.