Crear alias de ruta mediante programación cuando se crea el nodo

8

Tengo un tipo de contenido personalizado creado por un módulo. ¿Hay un enlace que pueda usar para establecer el alias de ruta de mi tipo de contenido personalizado cuando se crea un nodo?

Uno de mis campos es un código alfanumérico, y quiero usarlo en la ruta. por ejemplo: 'evento / myc0d3'

Noté que esta función ( path_set_alias ) existía en 6, pero no puedo encontrar el equivalente para 7. Y no sé dónde lo llamaría.

cbaigorri
fuente

Respuestas:

10

En lugar de usar hook, se debe usar el módulo Pathauto donde puede definir un patrón específico de cómo se generan los alias por tipo de contenido (at /admin/config/search/path/patterns). Allí puede usar patrones de reemplazo o codificar los suyos. Es un enfoque mucho más limpio.

De lo contrario, puede intentar hook_node_presave($node)cambiar el alias directamente:

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

o use la path_save(&$path)función directamente de la siguiente manera:

$path = array('source' => "node/$node->nid", 'alias' => 'foo/bar');
path_save($path);
kenorb
fuente
Para mí, solo ambos en combinación funcionaron, de modo que al final dentro del campo de texto de alias se escribe el alias correcto. Hacer solo path_save () funcionó, pero luego tuve el alias incorrecto en el campo de texto de alias en la edición de nodo, por lo que una nueva reserva me habría devuelto el alias incorrecto.
leymannx
9

La función ahora se llama path_save () , consulte path_taxonomy_term_insert () para ver un ejemplo.

Berdir
fuente
44
realmente debería expandir esta respuesta no solo para vincular a recursos externos, sino que los enlaces, siempre que sean válidos, fueron útiles.
DrCord
9

hook_node_insert () no estaba funcionando en mi caso, y con algunas búsquedas se me ocurrió esta publicación de blog . Implementé hook_insert () de la misma manera y presto.

/**
 * Implements hook_insert().
 */
function mymodule_insert($node) {
    // Set the URL alias
    if (empty($node->path['alias'])) {
        $node->path['alias'] = 'slug/' . $node->nid;
    }
}
cbaigorri
fuente
2
Para notar que hook_insert()se usa solo cuando el módulo que lo implementa está definiendo un tipo de contenido; el gancho no se puede usar para actuar en un nodo para un tipo de contenido definido desde otro módulo.
kiamlaluno
esta es exactamente la razón por la cual no se recomienda simplemente vincular a los artículos, sino ampliar la respuesta y extraer la información útil principal de esos artículos: ese enlace de 'publicación de blog' ya no es válido y da como resultado un 404
Titi