viernes, 28 de agosto de 2009

Drupal: Reescribir una URL con código PHP

Para poder reescribir la URL de un enlace, se puede usar la función "custom_url_rewrite_outbound". Por ejemplo, supongamos que tenemos un catálogo generado por el Ubercart. Cada elemento del catálogo muestra una imágen y un título, cada grupo de imágen y título tienen el mismo URL, el cual lleva al usuario a una página general donde se muestran todos los items relacionados con el nombre de catálogo al cual se le hizo clic.

El problema sería ¿cómo puedo hacer para que después de hacer clic en uno de los items que muestra el catálogo, muestre más bien, el resultado de una Vista u otra página que nosotros queramos?

La solución más rápida que encontré es agregando en el archivo settings.php la función llamada "custom_url_rewrite_outbound". Con ésta función es posible reescribir la url de cualquier enlace que exista en la aplicación Drupal que estemos creando.

El código de ejemplo es:

function custom_url_rewrite_outbound(&$path, &$options, $original_path) {
if (preg_match('|^catalog/(.*)|', $path, $matches)) {
preg_match('/[0-9]+$/', $path, $matches);
switch ($matches[0])
{
case '3':
$path = drupal_get_path_alias('catalogo-alicates');
break;
case '4':
$path = drupal_get_path_alias('catalogo-lijas');
break;
case '5':
$path = drupal_get_path_alias('catalogo-martillos');
break;
}
}
}

Notar que en el primer preg_match: preg_match('|^catalog/(.*)|', $path, $matches), usamos una expresión regular para filtrar la url que queramos analizar. En mi caso la URL original es de la forma:

http://www.dominio.com/catalog/5

Lo que está en color rojo, es lo que deseo cambiar por

http://www.dominio.com/catalogo-martillos

Dependiendo del número que aparezca en la URL, se establece el alias. Esos alias que estoy usando son páginas que apuntan a Vistas de Drupal previamente creadas.

En realidad, la cosa es más compleja, pues estoy usando taxonomía; cada elemento del catálogo es un término taxonómico. En el índice de términos se observa la relación que existe entre el nombre que le dimos al término y la url que se le asignó automáticamente.

Referencias:
http://drupal.org/node/207330
http://drupal.org/node/243889
http://agaric.com/note/override-taxonomy
regular_expressions

No hay comentarios: