web-dev-qa-db-fra.com

Créer un alias de chemin par programmation lors de la création du nœud

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.

8
cbaigorri

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

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);
10
kenorb

La fonction est maintenant appelée path_save () , voir path_taxonomy_term_insert () pour un exemple.

9
Berdir

Implémentez hook_node_insert () .

0
Oswald