Drupal批量更新Url别名

时间:2012-08-20 21:40:25

标签: drupal drupal-path-aliases

我有一组节点(大约200个)需要更新自己的网址别名,因为我们更改了设置;从“site.com/things-to-do/title”到“site.com/guides/title”

我尝试使用VBO,但是当我选择节点时,单击Update Url Alias,然后执行,没有任何反应。

虽然我不想直接更新数据库,但我也尝试过: “UPDATE url_alias set dst = replace(dst,'thing-to-do','guides')WHERE url_alias LIKE'Tood-to-do /%';

由于

4 个答案:

答案 0 :(得分:1)

路径自动应该解决您的问题: http://drupal.org/project/pathauto

它将为您提供删除现有别名并重新生成它们的选项。

答案 1 :(得分:1)

除了使用上面描述的pathauto模块之外,您还应该使用路径重定向模块 - http://drupal.org/project/path_redirect - 这样您就可以将旧链接重定向到新创建的链接,否则您的旧链接将会消失。 您还可以使用全局重定向 - http://drupal.org/project/globalredirect

答案 2 :(得分:0)

这是我写的一个解决问题的快速脚本。它在别名上进行简单的查找和替换,然后创建重定向。

您需要安装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);

}

答案 3 :(得分:0)

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

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

我希望上面的代码能解决这个问题。