Puncte:1

Încărcarea și salvarea programatică a nodurilor nu îmi actualizează câmpul, ci editarea și salvarea manuală. De ce diferența?

drapel ng

Am migrat câmpurile de dată D7 la D9 Smart Date (cu recurente). În timpul migrării, am analizat regulile vechi de repetare și le-am populat în noul câmp D9 Smart Date.

Cu toate acestea, datele care se repetă nu apar în Vizualizări decât dacă mai întâi editez și salvez manual nodul (fără a face nicio modificare).

Problema este că am sute de noduri care trebuie resalvate și niciuna dintre metodele progratice nu funcționează. Numai editarea și salvarea manuală forțează regula de repetare să facă ceea ce trebuie făcut pentru a apărea.

Am încercat să folosesc funcția Save Node din Views Bulks Action. Am încercat să folosesc modulul Salvare tot. Am încercat să creez un script PHP pentru a încărca și a salva nodul.

Niciuna dintre acestea nu funcționează. Scenariul meu este mai jos. Aveți idee de ce funcționează doar salvarea manuală?

introduceți descrierea imaginii aici

Jaypan avatar
drapel de
În general, nodul nu va face nimic atunci când este salvat dacă nu s-a schimbat nicio valoare.
quantumized avatar
drapel ng
Tocmai am modificat scriptul pentru a schimba sticky-ul în true și încă nu funcționează. Deci nodul se salvează, dar orice trebuie să facă câmpul Smart Date funcționează numai atunci când nodul este salvat manual. Există o modalitate de a imita salvarea manuală a nodului prin cod? Nu sunt sigur de unde vine discrepanța.
Jaypan avatar
drapel de
Este posibil ca modulul să aibă o anumită funcționalitate care este efectuată la salvarea formularului, mai degrabă decât la salvarea entității. Aș parcurge modulul și m-aș uita la definiția formularului și/sau la orice cârlige de modificare a formularului pentru a vedea dacă fac ceva în acest fel.
quantumized avatar
drapel ng
Mulțumesc. Are sens. Există o modalitate de a salva un formular în mod programatic?
Jaypan avatar
drapel de
În Drupal 7, puteți utiliza drupal_form_submit(). Această înregistrare a modificării (https://www.drupal.org/node/2121003) spune că puteți utiliza `\Drupal::formBuilder()->submitForm()`. Nu stiu insa care este mecanica
Puncte:1
drapel cn

Aveți idee de ce funcționează doar salvarea manuală?

După cum a menționat Jaypan în comentarii, acest lucru se datorează faptului că Drupal nu va salva nodul dacă nimic nu s-a schimbat.

Cand tu trimiteți formularul pentru o entitate care are o dată creată/modificată (adică implementează EntityChangedInterface), face asta:

if ($entity instanceof EntityChangedInterface) {
  $entity->setChangedTime($this->time->getRequestTime());
}

Care modifică valoarea unui câmp, forțând entitatea să salveze.

Puteți folosi aceeași metodă pentru a forța o salvare în codul dvs.

quantumized avatar
drapel ng
Mulțumesc pentru informații @Clive. Speram să fie ceva simplu, așa cum ați sugerat dvs., dar când schimb sticky-ul de la false la adevărat și resavez Smart Date încă nu face, magia care apare atunci când salvez manual. S-a sugerat că poate modulul face ceva special care are loc numai în timpul editării/salvarii unui formular de nod, dar nu îmi pot da seama cum să salvez formularul în mod programatic.
drapel cn
Există un exemplu aici: https://drupal.stackexchange.com/questions/253009/how-to-call-submit-form-from-another-page-in-custom-module - problema este că este un formular de entitate, deci nu exact simplu de populat valorile de depunere. Va exista și o altă metodă API pentru asta, dar formularele sunt puțin dificil de lucrat programatic (cel puțin din exterior). Ar putea fi mai puțin efort să vă uitați prin codul din modulul de întâlnire inteligentă și să vedeți dacă face ceva neobișnuit
Jaypan avatar
drapel de
Da, poate trebuie doar să scoți codul din modulul lor și să-l pui într-un hook_update_N() sau să faci un script drush care să facă același lucru.

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.