1

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

我尝试使用 VBO,但是当我选择节点时,单击更新 URL 别名,然后执行,没有任何反应。

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

谢谢

4

4 回答 4

1

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

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

于 2012-08-20T21:56:26.133 回答
1

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

于 2012-08-21T05:35:38.623 回答
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);

}
于 2013-08-19T23:49:23.443 回答
0
$nids = Drupal::entityQuery('node')
    ->condition('type', 'CONTENT_TYPE')
    ->execute();
$nodes = Node::loadMultiple($nids);

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

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

于 2020-06-11T06:28:46.647 回答