Drupal: Comment puis-je en programmant de créer une URL alias pour un nœud qui possède déjà un alias sur le nœud enregistrer?

J'ai un module personnalisé qui implémente crochet nodeapi d'exécuter du code lorsque le nœud est créé ou mis à jour.

Fondamentalement, je veux créer un alias basé sur de l'alias généré automatiquement sur le nœud d'enregistrer ou de mise à jour.

Maintenant je suis en utilisant un appel à path_set_alias et je ne veux le faire avec un type de contenu spécifique, le "produit".

Voici mon nodeapi appeler pour me faire

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;
}

Puis-je avoir cette fonction, celui que j'essaie de faire pour enregistrer mon deuxième URL alias pour moi.

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>");
 }

Ce n'est pas de définir l'alias si, il crée une copie de l'original du produit alias. Donc, Si j'ai commencé avec mon produit "Vert Fougère". Je veux sauver, et elle serait d'utiliser pathauto pour générer des produits/vert-fougère puis, après appel à mon module de code et de faire un alias "alt/produits/vert-fougère" et font toujours du point de retour pour le "node/nid" chemin d'accès.

Cependant, lorsque j'exécute ce code un doublon dans la base de données est créée. J'ai donc enregistrer Vert Fougère en une fois, et tout d'un coup, je vois deux enregistrements en double à la fin de la url_alias dans la base de données. "produits/vert-fougère" et les "produits/vert-fougère"

J'ai l'impression que je suis en train de penser à ce sujet dans une beaucoup trop comlpex. Mon client est conscient de la SEO coup qu'ils obtiennent lors de la prise de plus d'un alias pointer vers le même nœud, ils ont juste envie de le faire. Halp!

OriginalL'auteur JR. | 2011-01-26