【发布时间】:2011-01-26 22:54:31
【问题描述】:
我有一个自定义模块,它实现了钩子 nodeapi 以在创建或更新节点时执行一些代码。
基本上我想根据节点保存或更新时自动生成的别名创建一个别名。
现在我正在使用对 path_set_alias 的调用,我只想对特定类型的内容“产品”执行此操作。
这是我的 nodeapi 调用让我开始
function product_url_helper_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
if($node->type == 'product'){
switch($op){
case 'insert':
_create_alternate_url($node);
break;
case 'update':
_create_alternate_url($node);
break;
case 'view':
//do nothing
break;
default:
break;
}
}
return;
}
然后我有了这个功能,我正试图为我保存我的第二个 URL 别名。
function _create_alternate_url($node){
$aliasExists = db_fetch_object(db_query("SELECT count(dst) as total FROM {url_alias} WHERE dst = 'alternate/".$node->path."'"));
if($aliasExists->total == 0){
$product_url = $node->path;
$alternate_url = "alt/" . $node->path;
$default_node_path = "node/" . $node->nid;
path_set_alias($default_node_path, $alternate_url, 0, '');
drupal_set_message("Created Alternate path for Product: " . $node->title . " <br/> Path <a href='/" . $default_node_path ."'>" . $default_node_path . "</a> is now aliased by <a href='/" . $alternate_url . "'>". $alternate_url ."</a>");
}
但这并没有设置别名,它只是创建了产品原始别名的副本。所以如果我从我的产品开始是“绿色蕨类植物”。我会保存它,它会使用 pathauto 生成 products/green-fern 然后在调用我的模块代码并创建别名“alt/products/green-fern”并仍然让它指向“node/nid”路径.
但是,当我运行此代码时,会在数据库中创建一个副本。所以我保存了一次 Green Fern,突然我在数据库中的 url_alias 末尾看到了两条重复的记录。 "products/green-fern" 和 "products/green-fern"
我觉得我正在以一种过于复杂的方式思考这个问题。我的客户知道他们在将多个别名指向同一个节点时获得的 SEO 命中,他们只是希望它这样做。哈!
【问题讨论】:
标签: drupal