¿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.

,
  • Bien tio… no me salian de otras formas… gracias

  • Bien tio… no me salian de otras formas… gracias

  • Jordi

    Gran aporte, muchas gracias

  • Jordi

    Gran aporte, muchas gracias

  • Chido_dark

    Hola.

    Eh estado trabajando en esto, pero tengo un error, mi archivo se encuentra en /m/ por lo que no se que poner en lugar de define(‘JPATH_BASE’, dirname(__FILE__) );.

    Podrias ayudarme?.

    Saludos

  • Probaste con esto?

    require_once ( JPATH_BASE .DS.’includes’.DS.’m’.DS.’defines.php’ );
    require_once ( JPATH_BASE .DS.’includes’.DS.’m’.DS.’framework.php’ );

  • Ghohun Mail

    Me parece que el se refería a que su script estaba en m. Esa solución es para el caso en que el defines.php y el framework.php esten en m, no? Avisen si estoy equivocado je.

    Grax, buen aporte!

  • manuel

    hola a todos.

    Soy nuevo en joomla, podrian darme mas informacion encuanto al manejo de sesiones.
    tengo un formulario el cual direcciona a una pagina externa, pero antes de enviar estos datos del formulario, tengo que guardar los datos en una session. mi duda es :

    estas lineas de codigo donde lo pondria en el model? en el view? o en q parte de mi componente? gracias

    codigo :
    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();

  • Oscar

    Muy útil tu post amigo de antemano muchas gracias, había invertido muchos tiempo en la internet buscando un post como este.

  • Oscar

    Hola José María, bueno queria hacerte una consultica depronto sabes: implemente esta solución que diste y me funciona perfecto cuando invoco el sript .php desde el navegador, es decir: cuando en la URL coloco toda la ruta al script y doy enter

    EJ: http://midominio.com/myScript.php?miVariableAguardar=12345

    Cuando hago esto me registra bien en la session el valor en este caso: 12345

    Pero cuando invoco este mismo script desde un evento ajax con jQuery, no me registra la session.

    Tienes alguna idea de porque?

    De antemano muchas gracias

  • José María Vazquez

    Hola Oscar. Realmente no se que pueda estar pasando ya que no utilizo jQuery… siento no poder ayudarte 😐

  • Frank

    se pone site? en : 
    $mainframe =& JFactory::getApplication(‘site’); 

  • Jose Maria Vazquez

    Si. De otra forma tendrías que hacer lo siguiente:

    $app =& JFactory::getApplication();
    if ($app->isSite()) {  // TU CODIGO}

  • Frank

    Brother porque cuando paso una variable no me imprime el valor:
    $destino=JRequest::getVar(‘txtdestino’);
    $session->set(‘fecIngUsu’, $destino);

    En la que recibe:
    echo $session->get(‘fecIngUsu’);
    esto me imprime : (nada no imprime nada)

    –Pero si le pongo un valor entre apostrofes(‘ ‘) si imprime pero cuando paso variables no, he probado las variables y si pasan su valor, me parece raro.

  • Frank

    Brother como hago cuando quiero pasarle el valor de una variable lo he intentado pero no me devuelve el valor. Tienes alguna recomendacion?

  • Cristyyinyang

    Excelente post!! Justo lo que necesitaba!!! 😀

  • lucas piecha

    Muchas gracias por aporte , muy bueno.