Puncte:0

Cum pot actualiza data nodului pentru toate nodurile

drapel cn

Am importat un număr de noduri într-un Drupal 9 proaspăt instalat. Ulterior, data originală de creare a conținutului (de pe site-ul anterior) a devenit importantă.

Am informațiile conform noilor ID-uri de nod. Nu știu unde să actualizez?

Am încercat să actualizez coloanele create și modificate în tabelul node_field_data, dar în lista de conținut încă văd data de import... Unde ar trebui să mă uit? (desigur că sunt deschis la sugestii cu module, trucuri în interfața de administrare etc, m-am gândit că actualizarea tabelelor sql ar fi mai ușoară).

Puncte:0
drapel in

În primul rând, aș evita pe cât posibil să fac actualizări directe DB pentru entități. Modelul de entitate al lui Drupal 8+ este strâns legat de straturile sale de abstractizare, implementate ca hooks. Este considerată cea mai bună practică de a modifica întotdeauna entitățile prin intermediul API-ul entității. Acest lucru va permite Drupal să mențină toate lucrurile sincronizate.

Acum, răspunsul scurt la întrebarea dvs. este că ștergerea memoriei cache a site-ului dvs. va duce probabil la afișarea noilor valori.

Un răspuns mai bun ar fi să scrieți niște scripturi PHP pentru a itera prin toate nodurile și a actualiza data creării conținutului prin intermediul API-ului entității. Folosesc adesea Drush pentru a efectua aceste tipuri de operații. Mai jos este un exemplu care ar trebui să se potrivească nevoilor dumneavoastră, bazat pe următoarea presupunere:

  • Ați încărcat valorile node:date într-o matrice numită $new_node_dates, unde cheile sunt NID-uri și valorile sunt Marcaje temporale Unix reprezentând noile date de creaţie. Vezi aici pentru un exemplu de citire a unui fișier CSV într-o matrice. Dacă datele nu sunt într-un format de marcaj temporal Unix, puteți utiliza strtotime() pentru a le converti.

Declarația Drush ar fi atunci:

drush eval '$node_storage = \Drupal::entityTypeManager()->getStorage("nod"); foreach($new_node_dates as $nid => $creation_date) { $node = $node_storage->load($nid); $nod->creat = $data_creare; $nod->salvare(); }'

Mult noroc!

loker avatar
drapel cn
Vă mulțumesc pentru răspunsul dumneavoastră frumos detaliat și explicat. A funcționat ca un farmec și, de asemenea, am o nouă abordare...

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.