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

8

J'ai un type de contenu personnalisé créé par un module. Existe-t-il un point d'ancrage 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?

L'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.

cbaigorri
la source

Réponses:

10

Au lieu d'utiliser le hook, le module Pathauto doit être utilisé où vous pouvez définir un modèle spécifique de génération d'alias par type de contenu (at /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 de hook_node_presave($node)modifier l'alias directement:

$node->path['pathauto'] = 0; // Required only if Pathauto is enabled.
$node->path['alias'] = "foo/bar";

ou utilisez la path_save(&$path)fonction directement comme ci-dessous:

$path = array('source' => "node/$node->nid", 'alias' => 'foo/bar');
path_save($path);
Kenorb
la source
Pour moi, seuls les deux en combinaison ont fonctionné, de sorte qu'à la fin à l'intérieur du champ de texte d'alias, le bon alias est écrit. Faire seulement path_save () a fonctionné mais j'avais alors le mauvais alias dans le champ de texte d'alias lors de la modification du nœud, donc une simple réenregistrement m'aurait de nouveau obtenu le mauvais alias.
leymannx du
9

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

Berdir
la source
4
vous devriez vraiment étendre cette réponse pour ne pas seulement créer un lien vers des ressources hors site, mais les liens, tant qu'ils restent valides, étaient utiles.
DrCord
9

hook_node_insert () ne fonctionnait pas dans mon cas, et avec certaines recherches, j'ai trouvé cet 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;
    }
}
cbaigorri
la source
2
Pour remarquer que ce hook_insert()n'est utilisé que lorsque le module l'implémentant définit un type de contenu; le hook ne peut pas être utilisé pour agir sur un nœud pour un type de contenu défini à partir d'un autre module.
kiamlaluno
c'est exactement la raison pour laquelle il n'est pas recommandé de simplement créer un lien vers des articles, mais de développer la réponse à la place et d'extraire les principales informations utiles de ces articles - ce lien de `` blog '' n'est plus valide et se traduit par un 404
Titi