J'ai un type de contenu personnalisé créé par un module. Existe-t-il un hook que je peux utiliser pour définir l'alias de chemin de mon type de contenu personnalisé lors de la création d'un nœud?
Un de mes champs est un code alphanumérique, et je veux l'utiliser dans le chemin d'accès. par exemple: 'event/myc0d3'
J'ai remarqué que cette fonction ( path_set_alias ) existait en 6, mais je ne trouve pas l'équivalent de 7. Et je ne sais pas où je l'appellerais.
hook_node_insert () ne fonctionnait pas dans mon cas, et avec certaines recherches, j'ai trouvé cela article de blog . J'ai implémenté hook_insert () de la même manière et presto.
/**
* Implements hook_insert().
*/
function mymodule_insert($node) {
// Set the URL alias
if (empty($node->path['alias'])) {
$node->path['alias'] = 'slug/' . $node->nid;
}
}
Au lieu d'utiliser le hook, le module Pathauto doit être utilisé pour définir un modèle spécifique de génération d'alias par type de contenu (à /admin/config/search/path/patterns
). Là, vous pouvez utiliser des modèles de remplacement ou coder les vôtres. C'est une approche beaucoup plus propre.
Sinon, vous pouvez essayer hook_node_presave($node)
et changer directement l'alias:
$node->path['pathauto'] = 0; // Required only if Pathauto is enabled.
$node->path['alias'] = "foo/bar";
ou utilisez la fonction path_save(&$path)
directement comme ci-dessous:
$path = array('source' => "node/$node->nid", 'alias' => 'foo/bar');
path_save($path);
La fonction est maintenant appelée path_save () , voir path_taxonomy_term_insert () pour un exemple.
Implémentez hook_node_insert () .