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.

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

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

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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.