Рейтинг:0

Update Alias Programmatically

флаг 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
флаг in
Почему бы не использовать Pathauto для массовой генерации?
Greg Sims avatar
флаг us
URL-адреса соответствуют структуре веб-сайта для контента, который мы создали. Вот пример URL-адреса: /daily-devotions/genesis-1to11/in-the-beginning. Контент переведен на испанский и китайский языки. Китайские URL-адреса в основном английские. Испанские URL-адреса указаны на испанском языке без знаков ударения. Я не уверен, что есть решение Pathauto.
Rick B avatar
флаг cn
Вы должны иметь возможность установить шаблон Pathauto для каждого языка. (в Drupal 8) Если у вас также установлен модуль транслитерации и модуль токенов, я думаю, вы сможете использовать решение Pathauto для описанного вами варианта использования.
Greg Sims avatar
флаг us
Спасибо за отзыв о Pathauto - я изучу этот вопрос подробнее. Является ли код, который я включил выше, лучшим способом обновить URL-адрес узла без Pathauto?
Рейтинг:2
флаг gf

Немного более простой способ, который я нашел, заключается в том, что вам не нужно удалять и создавать объект псевдонима, поскольку вы можете просто обновить его свойства объекта на месте с помощью -> сохранить() как это:

функция alias_replace($path, $lang, $new_alias) {

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

  $alias_objects = $path_alias_manager->loadByProperties([
    'путь' => $путь,
    'код языка' => $язык
  ]);
  
  foreach($alias_objects как $alias_object) {
    $alias_object->псевдоним = $new_alias;
    $alias_object->сохранить();
  }
}

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.