Массовое обновление 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);
}