Joomla: manejar redirecciones sin morir en el intento
- Detalles
- Categoría: Programación
- Última actualización el Viernes, 27 Mayo 2011 00:11
- Escrito por cybnet
- Visto: 2007
Las redirecciones en joomla pueden ser un dolor de cabeza si no sabes como hacerlo. Aunque joomla tiene su propio método para redireccionar hay algunos detalles que debes conocer.
Para empezar se debe declarar la variable que carga la aplicación core de joomla. En joomla 1.5 se puede hacer de dos formas:
global $mainframe;
o
$mainframe = JFactory::getApplication();
En joomla 1.6 se ha eliminado la variable glogal $mainframe y sólo se puede hacer con la segunda opción. Una vez cargada la aplicación se puede acceder a la función redirect() del core de joomla. Mediante esta función se envía al usuario a una url especificada y se envía un header 301 (movido permanentemente). Esta función tiene tres parámetros y se usa de la siguiente forma:
$mainframe->redirect($url,$mensaje,$mensajetipo);
El parámetro $mensaje y $mensajetipo son opcionales y si no se especifican se tomarán sus valores por defecto que son $mensaje = '' (cadena vacía) y $mensajetipo = 'message' (puede ser message, error o warning).
El parámetro url debe ser especificado en modo absoluto y sólo acepta urls http:// y https://. Si se va a redirigir a una página de joomla, que será la inmensa mayoría de los casos, lo más correcto sería usar la clase JRoute para asegurarnos de que obtenemos la url de joomla correcta. Es aquí donde hay que tener en cuenta un detalle muy importante. Para usar el método JRoute para la función redirect() hay que especificar el segundo parámetro del método JRoute como false, parámetro que muy rara vez se usa y cuyo valor por defecto es true. Si es true, se reemplazará & por & en la url para cumplir con las especificaciones xhtml respecto a la escritura de urls en el código html. Pero esta url no va a ser insertada en el código html si no que va a ser usada por el navegador y el reemplazo de & por & dará errores en la redirección, en especial si tienes activadas las url amigables.
Ejemplo:
$mainframe = JFactory::getApplication();
if($condicion_para_redireccionar == true) {
$url = JRoute::_('index.php?option=com_content&view=article&id=4&Itemid=23',false);
$mainframe->redirect($url,JText::_('Has sido redirigido'),'message');
}
Aunque parezca un detalle sin importancia me costó un par de horas conseguir que una redirección en joomla me funcionase correctamente en todos los casos posibles, hasta que me dí cuenta del detalle de poner el segundo parámetro de JRoute en false. Espero os sea útil este post sobre la redirecciones en joomla.
joomla - redireccionar - redirect - JRoute - getApplication() - redirecciones en joomla - cms - php - programación
$mainframe = &JFactory::getApplication() ;if($condicion_para_redireccion ar == true) { $url = JRoute::_('index.php?option=com_content&view=article&id=4&Itemid=23',false); $mainframe->redirect($url,JText::_('Has sido redirigido'),'message');
}
(Texto de arriba está modificado con lo que comento aquí abajo)
Cuando pones el código completo no aparece () después de getApplication, y en la última línea no cierras con comillas el texto has sido redirigido. Son dos chorradas de despiste, pero te las comento porque las he tenido que cambiar y está muy bien la explicación.
Saludos!!






RSS
Perfil
Artículos
RSS