Vistas

Las vistas en CodeIgniter son páginas PHP o fragmentos de páginas que muestran datos, como por ejemplo, una cabecera, pie de página, la página principal con el listado de libros dados de alta en la base de datos, etc. De hecho, podemos incrustar vistas dentro de vistas si necesitamos ese tipo de jerarquía. Dichas vistas nunca se llaman directamente, deben ser cargadas por un controlador, es decir, el controlador es el responsable de coger los datos del modelo (si ese es el caso) y pasar los datos a una vista en particular.

Veamos un ejemplo:

<html>
<head>
   <title><?php echo $titulo ?></title>
</head>
<body>
   <h1><?php echo $cabecera ?> </h1>
   <table border="1">
     <tr>
       <th>TITULO</th>
       <th>PRECIO</th>
     </tr>
     <?php foreach ( $librosPortada as $libro):?>
      <tr>
       <td><?php echo $libro['titulo']?></td>
       <td><?php echo number_format($libro['precio'],2)?></td>
      </tr>
     <?php endforeach;?>
   </table>
</body>
</html>

Esta vista contiene código HTML junto con código PHP donde se recorre un array mediante un foreach. Se llamara **listar.php** y se almacenará en **application/views/libros/** Más adelante veremos como pasar contenido dinámico entre la capa controlador y vista mediante arrays asociativos u objetos.

Las vistas se tienen que almacenar como ficheros PHP y dentro de la carpeta **application/views/** Normalmente tendremos una vista por acción del controlador, por lo que sería recomendable englobar todas las vistas relacionadas con un controlador en una nueva carpeta con el mismo nombre que dicho controlador. Por ejemplo, para el controlador libros, el cual tiene las acciones **listar** y **ver**, englobaremos en una carpeta **libros** dentro de **views** los diferentes ficheros **vista**. Por ejemplo:

  • application/views/libros/
    • listar.php
    • ver.php
  • application/views/usuarios/
    • ver.php
    • registrar.php
  • application/views/cesta/
    • ver.php

Para cargar una vista dentro de un controlador, usaremos el método propio de la clase **CI_Controller** llamado **view()**, donde especificamos el nombre de la vista o ruta si está dentro de una carpeta (sin la extensión ".php") Veamos un ejemplo:

$this->load->view('libros/listar');

Estamos cargando/añadiendo la vista **listar.php** almacenada en **application/views/libros/**

Para añadir contenido dinámico a una vista, podemos pasar un array asociativo o un objeto como segundo parámetro al método **view()**. Por ejemplo:

//Pasamos los datos obtenidos en el controlador a la vista
$this->load->view('libros/listar', $variables);

Siendo la variable $variables, un array asociativo con diferentes valores

...
//Inicializamos una array donde iremos introduciendo variables
$variables = array();
//título de la vista
$variables [ 'titulo' ] = "LIBRERIA UAZON – Pagina principal";
//mensaje especifico para la plantilla
$variables [ 'cabecera' ] = "Últimas novedades";
//obtenemos de la base de datos todos los libros para la portada
$variables [ 'librosPortada' ] = $this->Libros_model->getLibrosPortada();
//Pasamos los datos obtenidos en el controlador a la vista
$this->load->view('libros/listar', $variables);

Si inspeccionamos el array **$variables** con **print_r()** tendremos el siguiente código:

Array
(
   [titulo] => LIBRERIA UAZON – Pagina principal
   [cabecera] => Ultimas novedades
   [librosPortada] => Array
   (
      [0] => Array
      (
         [id] => 1
         [titulo] => Anna Karenina [precio] => 22
      )
      [1] => Array
      (
         [id] => 2
         [titulo] => Alice's Adeventures in Wonderland
         [precio] => 7
      )
...

Las claves del array que pasamos al método que coincidan con variables del mismo nombre en la vista, se les asignará el valor de dicho índice, es decir, dentro de la vista no usaremos el array **$variables** sino variables PHP que se llamarán igual que los índices de dicho array. Del ejemplo anterior, dentro del método **index()** del controlador **Libros** tenemos el siguiente código:

...
//Inicializamos una array donde iremos introduciendo variables
$variables = array();
//titulo de la vista
$variables [ 'titulo' ] = "LIBRERIA UAZON – Página principal";
//mensaje especifico para la plantilla
$variables [ 'cabecera' ] = "Últimas novedades";
//obtenemos de la base de datos todos los libros para la portada
$variables [ 'librosPortada' ] = $this->Libros_model->getLibrosPortada();
$this->load->view('libros/listar', $variables);
...

Creamos un array **$variables ** donde cada índice del array contendrá unos valores. En el caso de **$variables['titulo']** contendrá una cadena y en el caso de **$variables['librosPortada']** un array de libros. Al cargar la vista **listar.php** la capa **View** se encarga de rellenar los valores de las variables que tengan el mismo nombre que los índices del array. Destacar que dentro de la vista podremos crear nuevas variables ya que al final es un fichero PHP. Además también podemos pasar un objeto a la capa vista para que sea usado como tal.

$titulo = "LIBRERIA UAZON – Pagina principal"
$cabecera = "Ultimas novedades"
$librosPortada = Array (
   [0] => Array ( [id] => 1
      [titulo] => Anna Karenina
      [precio] => 22
   )
   [1] => Array ( [id] => 2
      [titulo] => Alice's Adeventures in Wonderland
      [precio] => 7
   )
...

results matching ""

    No results matching ""