Массовое обновление Drupal Url Alias

У меня есть набор узлов (около 200), которым необходимо обновить их псевдоним URL, так как мы изменили настройку; от "site.com/things-to-do/title" до "site.com/guides/title"

Я пытался использовать VBO, но когда я выбираю узлы, нажимаю Update Url Alias ​​и затем выполняю, ничего не происходит.

Хотя я бы предпочел не выполнять прямое обновление БД, я также попытался: "ОБНОВИТЬ url_alias set dst = replace(dst," вещи "," руководства ") ГДЕ url_alias НРАВИТСЯ" вещи "/%;

Спасибо

3 ответа

Решение

Автоматический путь должен решить вашу проблему: http://drupal.org/project/pathauto

Это даст вам возможность удалить существующие псевдонимы и восстановить их.

Помимо использования модуля pathauto, указанного выше, вы также должны использовать модуль перенаправления пути - http://drupal.org/project/path_redirect - чтобы вы могли перенаправить ваши старые ссылки на вновь созданные, иначе ваши старые ссылки исчезнут, Вы также можете использовать Глобальное перенаправление - http://drupal.org/project/globalredirect

$nids = Drupal::entityQuery('node')
    ->condition('type', 'CONTENT_TYPE')
    ->execute();
$nodes = Node::loadMultiple($nids);

foreach($nodes as $node) {
    $node->path->pathauto = 1;
    $node->save();
}

Я надеюсь, что приведенный выше код решит проблему.

Вот быстрый сценарий, который я написал, который решает проблему. Он выполняет простой поиск и замену псевдонима, а затем создает перенаправление.

Вам нужны установленные модули url_alias и path_redirect, это для Drupal 6. Это не самый чистый синтаксис (он был написан быстро), но он работает.

$string_to_replace = "foo";
$replacement_string = "bar";

//Get an array containing all aliases that need to be updated
$query = "SELECT * from url_alias where dst like '%$string_to_replace%'";
$result = db_query($query);
$paths = array();
while ($row = db_fetch_array($result)){
  $paths[] = $row;
}

foreach($paths as $path){

  //Determine the new path
  $path['new_dst'] = str_replace($string_to_replace,$replacement_string,$path['dst']);

  //Update the existing url_alias
  $query = "UPDATE url_alias SET dst = '".$path['new_dst']."' WHERE pid = " . $path['pid'];
  $result = db_query($query);

  //Create and save a redirect
  $redirect = array(
    'source' => $path['dst'],
    'redirect' => $path['src'],
  );
  path_redirect_save($redirect);

}
Другие вопросы по тегам