FRONTEND: Ejercicios de conceptos avanzados de CodeIgniter

Para realizar todos los ejercicios se va a hacer un uso intensivo de las librerías **database** y **session**, por lo que es recomendable cargarlas al arrancar CodeIgniter. Para ello dirígete al fichero **autoload.php (application/config/)** en la sección específica de carga de librerías (**$autoload ['libraries'])** hay que añadir en el array las librerías database y session de esta forma:

$autoload ['libraries'] = array('database', 'session');

También es conveniente cargar los helpers: url, form y html

$autoload ['helper'] = array('url', 'form', 'html');

Uso intensivo del helper URL

Se recomienda que tanto en controladores como vistas hagas un intensivo del helper URL usando las funciones siguientes: **base_url()**, **anchor()** y **redirect()**

Estas funciones nos van a permitir realizar un código mucho más portable, es decir, nos van a ayudar a ser no depender del entorno en el que estemos trabajando (desarrollo, producción, test, etc.) Si en desarrollo trabajamos en la url **http://localhost/proyecto/index.php/**, cuando pasemos el proyecto al servidor de proyectos (entorno de producción) la url será **http://proyectos.proweb.ua.es//..**, por lo que no tendremos que preocuparnos de cambiar los enlaces de toda la aplicación, tan sólo modificar la propiedad **base_url** del fichero config.php

Integración de la clase Session de CodeIgniter en el proyecto

Añadir la tabla **ci_sessions** a la base de datos uazon.

CREATE TABLE IF NOT EXISTS  `ci_sessions` (
    session_id varchar(40) DEFAULT '0' NOT NULL,
    ip_address varchar(45) DEFAULT '0' NOT NULL,
    user_agent varchar(120) NOT NULL,
    last_activity int(10) unsigned DEFAULT 0 NOT NULL,
    user_data text NOT NULL,
    PRIMARY KEY (session_id),
    KEY `last_activity_idx` (`last_activity`)
);

Realiza la configuración necesaria en el fichero **config.php** para almacenar los datos de sesión en la tabla **ci_sessions** (el motor de dicha tabla puede ser MyISAM) y además, usando una de las dos páginas de generación de claves mencionadas en los apuntes, da valor al índice **'encryption_key'** dentro del array $config (es necesario dar valor a ese índice si quieres usar la libería de sesiones de CodeIgniter).

Para comprobar que funciona, en la acción index del controlador libros, comprueba si existe la variable contador en la sesión y si no la guardas en la sesión con valor 1. Si existe obtén su valor, lo incrementas y lo vuelves a guardar. Después de la comprobación envía la variable contador a la vista e imprime la veces que accedes a la página. Comprueba, a través de phpmyadmin, que en la tabla ci_session se guardan los datos del usuario en la sesión. Si has realizado varias visitas, borra el contenido que haya en la tabla ci_session y verifica accediendo a la página principal que el contador se pone otra vez a 1.
**Una vez comprobado que funcionan las sesiones puedes comentar/quitar el código realizado.**

Integración de MY_Controller en el proyecto

Instalación

Vamos a integrar la clase **MY_Controller** dentro de nuestra aplicación CodeIgniter. Tan solo tenemos que descargarla de moodle o ir a la página de GitHub del desarrollador y coger el fichero **MY_Controller.php** y copiarlo en la carpeta **proyecto/aplication/core/**.

Quedará así: **proyecto/aplication/core/MY_Controller.php**

Es muy importante copiarla en esa carpeta ya que existe /system/core el cual no debemos tocar ya que contiene clases base del núcleo de CodeIgniter y cuando actualicemos la versión del mismo dicho directorio suele ser reemplazado por completo perdiendo los cambios que hayamos introducido en él.

A continuación crea la carpeta **layouts/** en la ruta **application/views/** y dentro el fichero **application.php** que contendrá el layout de la aplicacion. Coloca tu cabecera de la aplicación, un bloque donde hagas un echo de la variable $yield y el pie de página. Aquí tienes un ejemplo:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Libreria UAZON</title>
    <link rel="stylesheet" href="<?php echo base_url()?>css/style.css" type="text/css"  media="screen"/>
    <link rel="stylesheet" href="<?php echo base_url()?>css/uazon.css" type="text/css"  media="screen"/>
</head>
<div id="cabecera">
 <div id="cabeceraUsuario">
  <?php if ($this->session->userdata('usuario_valido')) : ?>
   <span>
    Hola <span id="nombreUsuario">
         <?php echo $this->session->userdata('usuario_valido')?>
    </span>
    &nbsp;|&nbsp;<?php echo anchor('usuarios/ver', 'Perfil')?>
    &nbsp;|&nbsp;<?php echo anchor('usuarios/logout', 'Desconectar')?></span>
   <?php else: ?>
    <span id='cabeceraNoLogueado'>
    <?php echo anchor('usuarios/loginform','Iniciar sesi&oacute;n','title="Inicia sesión"')?>
    |
    <?php echo anchor('usuarios/addform', 'Reg&iacute;strate')?></span>
   <?php endif; ?>
 </div>
 <p>
   <?php echo anchor('','Portada')?> |
   <?php echo anchor('libros/buscar', 'Buscar')?>
 </p>
</div>
<div id="logo">
    <p>
        <?php echo anchor('', img('images/logo.gif') ) ?>
    </p>
</div>

<!-- contenido -->
<div id="general">
    <?php echo $yield ?>
</div>

<!-- pie de página -->
<div id="pie">
    <div id="pieWebmaster">
        <p>
            <a href="mailto:[email protected]" class="enlacepie">Webmaster</a> - UAZON <?php echo date("Y") ?> - Page rendered in {elapsed_time} seconds - Memory usage {memory_usage}
        </p>
    </div>
    <p>
        <?php echo anchor('libros/index', 'Portada') ?> |
        <?php echo anchor('libros/buscar', 'Buscar') ?>

    </p>
</div>
</body>
</html>

Como vemos en la vista anterior podemos acceder a la librería Session para averiguar si el usuario existe en sesión o no: $this->session->userdata('usuario_valido')
No conviene abusar del acceso a librerías en los ficheros vistas ya que el acceso al carro de la compra se considera reglas de negocio y debe colocarse en el controlador o en el modelo.

Modificar el controlador libros

Extiende la clase controlador Libros de la clase MY_Controller. Carga el modelos Libros_model de esta forma:

protected $models = array( 'libros' );

Realiza los cambios oportunos para utilizar la librería MY_Controller quitando el código que ya no sea necesario:

  • Carga el modelo de libros
  • Carga de la cabecera, pie de página y de cada vista en cada controlador.

Modificar las vistas listar.php y ver.php

Cambia el nombre de la vista "listar.php" por "index.php" para ajustarlo a lo que nos recomienda MY_Controller. En cada acción del controlador de libros pasa las variables a cada vista a través de la vaiable $this->data.

Buscar libros desde la página principal

Este ejercicio corresponde con el realizado con el "10.16.1 FRONTEND::Formulario de búsqueda de libros". Lo que se pide es integrar el formulario de búsqueda en el proyecto realizado con CodeIgniter

Habrá que añadir una acción llamada **buscar()** que realice la búsqueda de libros reutilizando el código que hayas realizado en la resolución de ese ejercicio.

El resultado de la búsqueda se pintará en la vista **buscar.php** dentro de la carpeta **libros**.

Usuarios

Resumen

Hay que realizar las siguientes páginas:

Entre paréntesis está el nombre de cada acción que hay que implementar en el controlador Usuarios.

Formulario de login (loginform)

Formulario de login para realizar login en la aplicación.

Puedes basarte en este ejemplo similar al utilizado por osCommerce:

Formulario de login de usuario

En la parte izquierda damos instrucciones para realizar un registro nuevo de usuario y en el bloque de la derecha mostramos el formulario de login.

(OPTATIVO) Formulario de registro de usuario (addform)

Página donde mostramos un formulario de registro al usuario.

Página que puede servirte de ejemplo:

Formulario de registro de usuario

(OPTATIVO) Página de perfil de usuario (ver)

Formulario que carga los datos del usuario y nos proporciona la opción de actualizar los datos del mismo.

Puedes basarte en este ejemplo similar al utilizado por osCommerce:

Formulario de perfil de usuario

Se recomienda crear dos formualrios, uno para los datos del perfil de usuario y otro para actualizar la contraseña del mismo.

Modelo (Usarios_model)

Crear el modelo **Usuarios_model** (**usuarios_model.php)** que implemente los siguientes métodos:

getUsuarioLogin($email, $contrasenya)

SQL que comprueba si usuario existe en la base de datos. Si existe devuelve un objeto usuario con los datos id, nombre y rol.

Si no existe lanzar una excepción que será recogida por el controlador.

read($id)

SQL que devuelve los datos de un usuario para ser cargados. Devolverá tanto los datos de dicho usuario como el nombre e id del pais y nombre de la ciudad e id de la ciudad.

(OPTATIVO) create($usuario)

SQL que inserta un usuario en la tabla usuarios.

(OPTATIVO) update($usuario)

SQL que actualiza los datos del usuario en la base de datos.

(OPTATIVO) existeEmail($email)

SQL que devuelve TRUE o FALSE en el caso de que exista o no el email en la tabla usuarios.

Controlador

Crear el controlador **Usuarios** (**usuarios.php)** que extienda de MY_Controller. Hay que implementar las siguientes acciones:

loginform

Formulario de login de usuario que se llama a sí mismo tal y como se ha realizado en sesiones anteriores.

Si el usuario es correcto debes guardar en la sesión de CodeIgniter los datos siguientes:

$this->session->set_userdata('usuario_valido', $usuario['nombre']);

$this->session->set_userdata('id', $usuario['id']);

$this->session->set_userdata('rol' ,$usuario['rol']);

(OPTATIVO) addform

Formulario de registro de usuario. Como ayuda puedes basarte en el ejemplo guiado de los apuntes para realizar el registro de usuario en el proyecto.

(OPTATIVO) Añadir una función callback para comprobar que el email no está repetido. En el modelo se pide crear un método **existeEmail($email)** que devuelva TRUE o FALSE en caso de que exista dicho email en la tabla usuarios. Úsalo en el formulario de registro.

logout

Acción que borra los datos del usuario de la sesión. Una vez borrado realiza una redirección a la página principal.

(OPTATIVO) ver

Muestra un formulario con los datos del usuario y nos proporciona la opción de actualizar los datos del mismo.

Puedes basarte en este ejemplo similar al utilizado por osCommerce:

Formulario de perfil de usuario

Vistas

Crea una carpeta **usuarios** y dentro tienes que crear tantas vistas con el mismo nombre como acciones hayas creado en el controlador por ejemplo:

  • login.php
  • (OPTATIVO) addform.php
  • (OPTATIVO) ver.php

(la acción logout no necesita vista, ya que, hace una redirección a la página principal)

results matching ""

    No results matching ""