Clicky

Separar el contenido visible para un usuario de Joomla registrado/no registrado

Joomla inicio de sesión

Gestionar el contenido que se muestra en Joomla en función del estado de sesión de un usuario

A veces es posible que deseemos separar el contenido de lo ven que nuestros usuarios registrados de lo que ven los usuarios no registrados; cosas como una forma de inicio de sesión, o una llamada a la acción para registrarse sólo deben ser vistos por los usuarios que no estén ya ingresados, y los botones pueden cambiar de función o de aspecto en función de si el usuario ha iniciado sesión o no.

Hemos preparado esta pequeña guía práctica para gestionar el contenido que se muestra en función del actual estado de sesión de un usuario en Joomla. En esta guía se basa en un poco de codificación, por lo que tendrás que estar familiarizado con conceptos básicos de código PHP para sacar provecho de ella.

Joomla User Object

Lo primero que tendremos que hacer es definir una variable:

$user = JFactory::getUser();

que devuelve una referencia al objeto de usuario global, sólo debe crearlo si comprueba que el objeto no está creado. El objeto devuelto será un tipo de objeto JUser. El objeto JUser getUser ($id) carga el usuario; si se omite el argumento ($id) o es nulo, entonces se carga el usuario actual.

Ahora tenemos una variable que se llevará a un usuario, ya sea el usuario actual o uno definido por un identificador, podemos crear una condición que comprobará si el usuario de Joomla en cuestión está registrado o no. Comprobando si el ID de usuario es mayor que 0 (cuando un usuario no está conectado la identificación del usuario es siempre 0), podemos saber si un usuario ha iniciado sesión. Vamos a ponerlo esta lógica en forma de código:

$user = JFactory::getUser();
if($user->id > 0) {
// code to display for the registered users
}

Qué va a ejecutar el código en la sentencia if sólo para usuarios registrados.

Si solamente queremos separar el contenido para usuarios no registrados (los clientes), podemos comprobar en su lugar si el identificador de usuario es igual a 0:

$user = JFactory::getUser();
if($user->id == 0) {
// code to display for the guest users
}

Ejemplos

Mostrar mensaje de bienvenida para los usuarios registrados

Digamos que deseamos mostrar en la plantilla un mensaje de bienvenida personalizado; el código requerido debería ser algo como esto:

<?php
    $user = JFactory::getUser();
   if($user->id > 0){
      echo "Welcome " . $user->username;
   }
?>

donde $user->username mostrará el nombre de usuario del usuario actual.

Mostrar posición del módulo sólo para usuarios no registrados

Vayamos a algo un poco más dificil y estableceremos el contenido la posición de un módulo en particular, por ejemplo, bottom5, sólo para los usuarios que no están actualmente registrados. Como base usaremos la plantilla Simplicity de GavikPro; los cambios serán similares en otras plantillas, pero, por supuesto, las posiciones de los módulos pueden ser muy diferentes. Para realizar este cambio, tenemos que editar el archivo gk_simplicity/layouts/default.php y cambiar este fragmento:

<?php if($this->API->modules('bottom5')) : ?>
    <section id="gkBottom5">
        <div class="gkCols6<?php if($this->API->modules('bottom5') > 1) : ?> gkNoMargin<?php endif; ?> gkPage">
            <jdoc:include type="modules" name="bottom5" style="<?php echo $this->module_styles['bottom5']; ?>" modnum="<?php echo $this->API->modules('bottom5'); ?>" />
             
            <!--[if IE 8]>
            <div class="ie8clear"></div>
            <![endif]-->
        </div>
    </section>
    <?php endif; ?>

por este:

<?php $user = JFactory::getUser(); ?>
    <?php if($user->id == 0) : ?>
     
        <?php if($this->API->modules('bottom5')) : ?>
        <section id="gkBottom5">
            <div class="gkCols6<?php if($this->API->modules('bottom5') > 1) : ?> gkNoMargin<?php endif; ?> gkPage">
                <jdoc:include type="modules" name="bottom5" style="<?php echo $this->module_styles['bottom5']; ?>" modnum="<?php echo $this->API->modules('bottom5'); ?>" />
                 
                <!--[if IE 8]>
                <div class="ie8clear"></div>
                <![endif]-->
            </div>
        </section>
        <?php endif; ?>
     
    <?php endif; ?>

Ahora, los módulos de esta posición serán visibles sólo para usuarios no registrados de Joomla (invitados).

Muestra un texto diferente (etiqueta del botón o enlaces) dependiendo del estado de registro

En este ejemplo vamos a utilizar una vez más la plantilla Simplicity de Joomla. Hemos añadido un botón de inicio de sesión que se vincula a la forma de inicio de sesión, y también hemos añadido una clase adicional gkLogin para este elemento de menú. Ahora, cuando se hace clic en este botón, y los usuarios se registran en Joomla, este botón seguirá siendo visible como "Login", pero no se ve bien y puede ser confuso para los usuarios. Es hora de cambiarlo.

Tenemos que editar el archivo lib/menu/GKBase.class.php y en el método genMenuItem sumamos estos fragmentos:

if(stripos($active, 'gkLogin') !== FALSE) {
            $user = JFactory::getUser();
                if($user->id > 0) {
                   $txt = JText::_('TPL_GK_LANG_MYACCOUNT');
                }
            }

después de esta línea:

$txt .= $tmpname;

Este fragmento reemplaza el texto en el elemento de menú que tiene asignado a él la clase CSS "gkLogin" sólo cuando el usuario está conectado. Por supuesto, también tendrás que añadir un poco de texto para el archivo de idioma, así:

TPL_GK_LANG_MYACCOUNT="My account"

Ahora, cuando un usuario está dentro del sistema su elemento de menú debe ser similar a:

Menú registrado

Vista previa del botón para los usuarios registrados.

Jesus_Caceres