Puncte:3

Cum să nu afișați mesajul „a fost creat”?

drapel kz

Vreau să elimin mesajul care apare în zona de mesaje atunci când este creat un nou nod. Un mesaj tipic poate arăta astfel.

„Articol Articolul meu a fost creat.”

Examinez nodul în hook_node_insert, iar când sunt îndeplinite anumite criterii, vreau să șterg mesajul sau să împiedic apariția mesajului.

Am încercat să introduc următoarele hook_node_insert:

 $mesaje = \Drupal::messenger()->all();
 dpm($mesaje, 'mesaje');

Acesta scoate o matrice goală: mesaje => [].

Această întrebare similară pentru Drupal 7 Cum schimb/modific un mesaj de actualizare a conținutului sugerează hook_message_alter(). Nu am găsit asta sau un înlocuitor pentru Drupal 9.

S-a sugerat că acesta este un duplicat al Cum modific programatic un mesaj de sistem?

Nu cred că este un duplicat, dar acea întrebare conține un singur răspuns care este util pentru cazul meu de utilizare. Cel mai dintre răspunsuri nu sunt potrivite pentru această întrebare, așa că cred că întrebarea mea prezintă o problemă mai concentrată și merită să rămână deschisă.

Am trecut prin toate răspunsurile. Acestea sunt constatările mele cu privire la cât de bine se potrivesc acest întrebare:

  • Cel acceptat (utilizare \Drupal::messenger()->deleteAll();) nu funcționează când este introdus hook_node_insert, și nu este sugerată nicio plasare alternativă.

  • Cel mai votat (implement hook_preprocess_status_messages) nu trage după Formularul de creare a nodurilor a fost trimis și nu are efect.

  • Pentru a utiliza hack the $SESIUNE variabil (unset($SESSION['_symfony_flashes']['status'][0]);) nu funcționează în hook_node_insertși nu este sugerată nicio altă plasare.

Răspunsul de la Achraf JEDAY, cu 1 vot pozitiv înainte de al meu de astăzi (Adăugarea unui handler de trimitere personalizat la formularul de creare a nodurilor) funcționează. Cudos.

Acesta este și răspunsul acceptat (de la Patrick Kenny) aici.

4uk4 avatar
drapel cn
@FreeRadical, nu știu ce vrei să spui prin heringi roșii. Subiectul de acolo este mai general și vechi de câțiva ani. A evoluat prin introducerea noului serviciu de mesagerie de atunci și trebuie să citiți întregul thread dacă doriți să ajungeți la concluzia pe care ați rezumat-o aici în întrebare.
4uk4 avatar
drapel cn
Nu cunosc expresia hering roșu, dar se citește ca și cum nu recunoașteți efortul fiecărui participant pentru a avansa subiectul, care este mai general decât acesta. BTW primul vot la cel mai recent răspuns a fost de la mine când l-am referit în comentariul meu. Răspunsurile târzii au adesea puține voturi pur și simplu pentru că sunt prea târziu pentru a atrage multă atenție. Dar acest lucru se poate schimba în timp, atunci când oameni ca noi votează.
Free Radical avatar
drapel kz
Un „hering roșu” este un limbaj englezesc care înseamnă ceva care distrage atenția de la ceea ce este relevant pentru a răspunde la o anumită întrebare. Nu a fost intenția mea să disprețuiesc răspunsurile din întrebarea legată - doar să spun că majoritatea răspunsurilor nu au fost relevante pentru *aceasta*. Am eliminat fraza deoarece tu obiectezi la ea.
Free Radical avatar
drapel kz
@NoSssweat Da, unul dintre răspunsurile de acolo a funcționat. Dar au fost multe care nu au ajutat în cazul meu de utilizare specific, inclusiv răspunsurile acceptate și cele mai votate.Am adăugat text la întrebare în care comentez cât de bine se potrivesc aceste răspunsuri cu cazul meu de utilizare.
Puncte:3
drapel cn

Dacă doriți să adăugați un mesaj personalizat într-un cârlig, puteți șterge mesajele și apoi adăugați mesajul personalizat. Acest lucru este rapid și ușor și se poate face în majoritatea cârligelor.

Din păcate, acest lucru nu va funcționa hook_node_insert(), deci o alternativă este să adăugați un handler de trimitere personalizat la formularul de creare a nodurilor și să apelați serviciul Messenger în mod static:

  \Drupal::messenger()->deleteByType('status');
  \Drupal::messenger()->addMessage(t('Noul meu mesaj personalizat.'));

Acest lucru va deveni foarte dezordonat dacă treceți peste o mulțime de mesaje, dar dacă trebuie să schimbați doar câteva, aceasta este abordarea pe care o folosesc.

Puncte:2
drapel kz

Am acceptat și am votat pozitiv răspunsul lui Patrick Kenny, deoarece oferă 99% din soluție.

Totuși, mi-am dat seama că aveam nevoie și de lucrul acesta:

Examinez nodul în hook_node_insert, iar când sunt îndeplinite anumite criterii, vreau să șterg mesajul sau să împiedic apariția mesajului.

Aceasta a fost adăugată la întrebare după Patrick Kenny a răspuns, dar pentru cei interesați de cum a fost rezolvat acest pas final:

  1. Dacă sunt îndeplinite anumite criterii, introduceți un mesaj de eroare \Drupal::messenger()->addError(t('Eroare'));
  2. Mirosiți mesajul de eroare din handlerul de trimitere și, dacă este prezent, ștergeți mesajul de stare nedorit.

Voila!

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.