Alterar todas las URL para incluir información adicional

8

¿Qué ganchos están disponibles para alterar las URL? Por ejemplo, hay módulos de idioma que, cuando están habilitados, proporcionan URL como en /en/node/1lugar de dejarlo como /node/1.

Quiero tener algo similar en la URL, a lo que pueda tener acceso sin que se vea comprometida otra funcionalidad.

¿Cómo se logra esto?

Mateo
fuente

Respuestas:

4

¿Entonces está buscando una manera de modificar una URL de enlace mientras se está escribiendo? Investigué esto recientemente y me sorprendió la cantidad de caza que se requería.

Fui con hook_url_outbound_alter( &$path, &$options, $original_path ), que le permite alterar las URL de enlace que están siendo escritas por el sistema de URL de Drupal.

También hay hook_url_inbound_alter( &$path, $original_path, $path_language ), que podría ser mejor, ya que incluye el lenguaje específico de la ruta: depende de dónde desea que tenga lugar la alteración. Personalmente, creo que es hook_url_outbound_alter()confiable y sencillo trabajar con él: cambia todas las URL apropiadas a medida que se escriben, y al usar $ options puede agregar y editar de manera confiable cadenas de consulta (...? Query = string & foo = bar) y franquicias hash (... #someId).

Modifique $ path y actualizará la ruta real que se escribe en la URL href. Por supuesto, esto se ejecuta en todos los enlaces, por lo que querrá comenzar comprobando que es un enlace que desea modificar.

Se ejecuta antes del alias, por lo que se basará en los valores predeterminados de Drupal. Para dar dos ejemplos muy simplistas, si desea modificar solo las rutas de taxonomía:

function some_module_url_outbound_alter( &$path, &$options, $original_path ) {
  if(strpos($original_path, 'taxonomy/term') === 0) {
    // do stuff
  }
}

Y / o si solo desea que se ejecute en páginas particulares, por ejemplo, páginas de edición de nodos:

function some_module_url_outbound_alter( &$path, &$options, $original_path ) {
  $current_path = explode("/", current_path() );
  if (count($current_path) >= 3 && $current_path[0] == "node" && $current_path[2] == "edit") {
    // do stuff
  }
}
user56reinstatemonica8
fuente