¿Para que? Bueno, estoy haciendo algunos módulos adicionales a Joomla con PHP, usando el componente Jumi, que permite agregar este tipo de código además de JavaScript y HTML como un módulo adicional de Joomla. Si bien uno puede conectarse a la base de datos usando el framework que provee el CMS y sus objetos, algo que no había podido resolver es la interacción con las variables de sesión.
Joomla tiene su propio administrador de sesiones y es por eso que esto no funciona:
$_SESSION['variable'] = 'valor';
Seguramente hay muchas maneras de lograr lo que describo, pero una es crear una instancia de la aplicación Joomla dentro del código PHP y, a continuación, se obtendrá acceso pleno a la sesión de Joomla y los usuarios.
Para establecer una variable de sesión en Joomla desde otro script PHP:
define( '_JEXEC', 1 );
define( 'DS', DIRECTORY_SEPARATOR );
define('JPATH_BASE', dirname(__FILE__) );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();
$session =& JFactory::getSession();
$session->set('miVariable', 'miValor');
Para obtener el valor de una variable de sesión de Joomla:
define( '_JEXEC', 1 );
define( 'DS', DIRECTORY_SEPARATOR );
define('JPATH_BASE', dirname(__FILE__) );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();
$session =& JFactory::getSession();
echo $session->get('miVariable');
Es importante recordar que es necesario cambiar el JPATH_BASE a la raíz de la instalación de Joomla si el archivo no está en el nivel raíz. JPATH_BASE debe ser sin una barra (/) al final.