我有一组节点(大约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 /%';
由于
答案 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();
}
我希望上面的代码能解决这个问题。