Puncte:0

Update Alias Programmatically

drapel us

I have a large website with 240 urls that need to be updated. I would like to do this programmatically to avoid making errors. I created the following function which seems to work. There seems to be a good bit of complexity here for what I am trying to accomplish. Is there a simplier way to update the url of a node?

function alias_replace($path, $lang, $new_alias) {

  $path_alias_manager = \Drupal::entityTypeManager()->getStorage('path_alias');

  $alias_objects = $path_alias_manager->loadByProperties([
    'path'     => $path,
    'langcode' => $lang
  ]);
  
  foreach($alias_objects as $alias_object) {
    $alias_object->delete();
  }

  $path_alias_manager->create([
    'path'     => $path,
    'alias'    => $new_alias,
    'langcode' => $lang
  ])->save();

}
Kevin avatar
drapel in
De ce să nu folosiți Pathauto pentru a genera în bloc?
Greg Sims avatar
drapel us
Adresele URL urmează structura site-ului web pentru conținutul pe care l-am creat. Iată un exemplu de adresă URL: /daily-devotions/genesis-1to11/in-the-beginning. Conținutul a fost tradus în spaniolă și chineză. Adresele URL chineze sunt în mare parte engleze. Adresele URL spaniole sunt în spaniolă fără semnele de accent. Nu sunt sigur că există o soluție Pathauto.
Rick B avatar
drapel cn
Ar trebui să puteți seta un model Pathauto pentru fiecare limbă. (în Drupal 8) Dacă aveți și modulul de transliterare și modulul de token instalat, cred că puteți utiliza soluția Pathauto pentru cazul de utilizare pe care l-ați descris.
Greg Sims avatar
drapel us
Vă mulțumim pentru feedback-ul despre Pathauto -- Voi analiza în continuare acest lucru. Codul pe care l-am inclus mai sus este cel mai bun mod de a actualiza adresa URL pentru un nod fără Pathauto?
Puncte:2
drapel gf

Un mod puțin mai simplu pe care l-am găsit este că nu trebuie să ștergeți și să creați obiectul alias, deoarece puteți actualiza proprietățile obiectului acestuia în loc cu ->salvare() ca aceasta:

funcția alias_replace($cale, $lang, $new_alias) {

  $path_alias_manager = \Drupal::entityTypeManager()->getStorage('path_alias');

  $alias_objects = $path_alias_manager->loadByProperties([
    'path' => $cale,
    'langcode' => $lang
  ]);
  
  foreach($alias_objects ca $alias_object) {
    $alias_object->alias = $new_alias;
    $alias_obiect->salvare();
  }
}

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.