J'ai un module personnalisé qui implémente Hook NODEAPI pour exécuter du code lorsque le nœud est créé ou mis à jour.
En gros, je souhaite créer un alias basé sur l'alias généré automatiquement sur le nœud Sauvegarder ou mettre à jour. P >
En ce moment, j'utilise un appel à path_set_alias et je veux seulement faire cela avec un type de contenu spécifique, "Produit". P>
Voici mon appel de NODEAPI pour me faire démarrer P>
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>"); }
4 Réponses :
Vous définissez explicitement le PID sur 0 dans le code. J'imagine que le deuxième noeud que ce code fonctionne pour renvoyerait une erreur. Essayez de changer de 0 en null dans votre path_set_alias () code> appel. P>
difficile à raconter à quel point vous souhaitez que les alias soient complexes, mais le pathAuto code>
Module semble être une solution simple à votre problème. Il vous permet de générer des alias automatiquement basés sur des jetons.
En tant que bonus, il place bien avec le path_redirect code>
module, qui définira 303 redirections (ou quoi que ce soit de redirection que vous souhaiteriez) sur des alias en double. Cela atténuera quelque peu vos préoccupations de référencement. P>
EDIT: P>
Êtes-vous super-duper sûr que votre code non autorisé appelle correctement les fonctions?
Les sections pertinentes de Si vous travaillez sur un site de test, vous pouvez également essayer de supprimer certains path_set_alias code> sont: p>
dpm ( ) code> s droit avant le
db_query code> S dans
nœud.module code> Pour savoir quelles sections du code sont en train de tirer et quelles données vont dans eux. < / p> p>
JR, améliorant votre code à Drupal7, les db_quys sont chers. Une meilleure façon peut utiliser la fonction de drupal de lookup_path: si les urlalias n'ont aucune valeur, il n'y a aucun alias pour cette URL, nous pouvons donc la créer en toute sécurité: P> if( urlAlias == '' )
path_set_alias($default_node_path, $alternate_url, 0, '');
Au fait, à Drupal7, nous devrions changer path_set_alias avec path_save ($ args = tableau ("source" => $ non_alias_path "=> $ new_aliased_url););););););););););););););););););););
Pathauto est la détection d'alias de double pour le nœud et écraser la personnalisation avec le type de contenu par défaut modèle. Par défaut, Pathauto créera un nouvel alias et supprimera un ancien lorsqu'une action de mise à jour est prise. p>
Si vous changez l'option Action de mise à jour pour "Créer un nouvel alias. Laissez le fonctionnement de l'alias existant" sur l'écran d'administrateur, / admin / config / de recherche / paramètres code>, il ne écrasera pas l'alias personnalisé. P>