Crea un alias di percorso a livello di codice quando viene creato il nodo


8

Ho un tipo di contenuto personalizzato creato da un modulo. È possibile utilizzare un hook per impostare l'alias del percorso del mio tipo di contenuto personalizzato quando viene creato un nodo?

Uno dei miei campi è un codice alfanumerico e voglio usarlo nel percorso. ad es .: 'event / myc0d3'

Ho notato che questa funzione ( path_set_alias ) esisteva in 6, ma non trovo l'equivalente per 7. E non so come la chiamerei.

Risposte:


10

Invece di utilizzare hook, è necessario utilizzare il modulo Pathauto in cui è possibile definire un modello specifico di come gli alias vengono generati per tipo di contenuto (at /admin/config/search/path/patterns). Lì puoi usare schemi di sostituzione o codificare il tuo. È un approccio molto più pulito.

Altrimenti puoi provare a hook_node_presave($node)cambiare l'alias direttamente:

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

o usa la path_save(&$path)funzione direttamente come di seguito:

$path = array('source' => "node/$node->nid", 'alias' => 'foo/bar');
path_save($path);

Per me solo entrambi in combinazione hanno funzionato, in modo che alla fine all'interno del campo di testo alias sia scritto l'alias giusto. Facendo solo path_save () ha funzionato, ma ho avuto l'alias sbagliato nel campo di testo alias sulla modifica del nodo, quindi un semplice salvataggio mi avrebbe restituito l'alias sbagliato.
leymannx,


9

hook_node_insert () non funzionava nel mio caso e con alcune ricerche mi è venuta in mente questo post sul blog . Ho implementato hook_insert () allo stesso modo e presto.

/**
 * Implements hook_insert().
 */
function mymodule_insert($node) {
    // Set the URL alias
    if (empty($node->path['alias'])) {
        $node->path['alias'] = 'slug/' . $node->nid;
    }
}

2
Notare che hook_insert()viene utilizzato solo quando il modulo che lo implementa sta definendo un tipo di contenuto; l'hook non può essere utilizzato per agire su un nodo per un tipo di contenuto definito da un altro modulo.
kiamlaluno

questo è esattamente il motivo per cui non è consigliabile collegarsi solo agli articoli, ma espandere invece la risposta ed estrarre le principali informazioni utili da quegli articoli - quel link 'post sul blog' non è più valido e si traduce in un 404
Titi

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.