我有一個自定義模塊,實現掛鉤節點,以在節點創建或更新時執行一些代碼。Drupal:如何以編程方式爲已在節點上保存別名的節點創建URL別名?
基本上我想根據自動生成的節點保存或更新別名創建一個別名。
現在我正在使用對path_set_alias的調用,並且我只想對特定類型的內容「product」執行此操作。
這是我的電話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>");
}
雖然沒有設置別名,但它只是創建產品原始別名的副本。所以如果我開始使用我的產品是「綠色蕨類植物」。我會保存它,然後在調用我的模塊代碼並使別名爲「alt/products/green-fern」後仍然使用pathauto生成products/green-fern,然後使其返回到「node/nid」路徑。
但是,當我運行此代碼時,會創建數據庫中的副本。所以我一次保存了Green Fern,並且突然間我在數據庫中的url_alias末尾看到了兩個重複的記錄。 「產品/綠色蕨類植物」和「產品/綠色蕨類植物」
我覺得我正以一種非常共同的方式思考這個問題。我的客戶意識到他們在向同一個節點提供多個別名時會得到SEO搜索,他們只是想讓它做到這一點。 HALP!
Err,剛纔注意到你已經在使用pathauto了 - 編輯我的響應...... – anschauung 2011-01-28 00:42:59