Псевдоним URL массового обновления Drupal

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

Я пытался использовать VBO, но когда я выбираю узлы, нажимаю «Обновить псевдоним URL», а затем выполняю, ничего не происходит.

Хотя я бы предпочел не делать прямое обновление БД, я также попытался: «ОБНОВИТЬ url_alias set dst = replace(dst, 'вещи, которые нужно сделать', 'руководства') WHERE url_alias LIKE 'things-to-do/%' ;

Спасибо


person homersheineken    schedule 20.08.2012    source источник


Ответы (4)


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

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

person danielson317    schedule 20.08.2012
comment
Да, у нас это установлено (он уже создал псевдонимы URL-адресов), но как заставить его перегенерировать псевдонимы только для тех определенных узлов, которым необходимо их изменить? У нас есть 15 миллионов узлов, и я не хочу регенерировать их для всех. - person homersheineken; 21.08.2012
comment
Если у вас есть список этих узлов, вы можете сбросить их в массив php и написать с ними быстрый скрипт. Просто вызовите $node = node_load(nid); узел_сохранить ($ узел); на каждом из них. - person danielson317; 21.08.2012
comment
Как насчет автоматического перенаправления старого псевдонима на новый? если старый алиас удалить, поисковые индексированные ссылки потеряют своих пользователей, и придет 404 страницы. - person Rantiev; 25.07.2014

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

person Vaibhav Jain    schedule 21.08.2012
comment
Хороший отзыв. Я всегда забываю установить редиректы, потому что всегда работаю на системах разработки, где они не нужны. - person danielson317; 21.08.2012

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

Вам нужно установить модули 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);

}
person Pez    schedule 19.08.2013

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

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

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

person Jackson    schedule 11.06.2020