gpt4 book ai didi

Drupal:如何以编程方式为节点保存时已具有别名的节点创建 URL 别名?

转载 作者:行者123 更新时间:2023-12-04 11:44:08 25 4
gpt4 key购买 nike

我有一个自定义模块,它实现钩子(Hook) 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 末尾看到两条重复的记录。 “产品/绿蕨”和“产品/绿蕨”

我觉得我正在以一种过于复杂的方式思考这个问题。我的客户知道他们在将多个别名指向同一个节点时获得的 SEO 命中,他们只是希望它这样做。哈!

最佳答案

JR,在 Drupal7 中改进您的代码,db_query 很昂贵。更好的方法是使用 lookup_path drupal 函数:

$urlAlias = drupal_lookup_path('alias',"node/".$node->nid . '/prices');

如果 urlAlias 没有值,那么这个 url 没有别名,所以我们可以安全地创建它:
if( urlAlias == '' )
path_set_alias($default_node_path, $alternate_url, 0, '');

关于Drupal:如何以编程方式为节点保存时已具有别名的节点创建 URL 别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4811065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com