Más sobre las vistas

  • Por
  • PHP
Veremos puntos adicionales sobre las vistas en CodeIgniter, como el paso de parámetros de configuración, codificación PHP específica de las vistas y cómo pueden devolver un texto en vez de escribirlo en pantalla.
Como hemos dicho anteriormente, las vistas serán parte fundamental de nuestras aplicaciones web en CodeIgniter. En el artículo anterior del Manual de CodeIgniter ya comenzamos a explicar qué eran las vistas y los detalles generales sobre su uso. No obstante, aun tenemos algunas cosas en el tintero que debes saber sobre las vistas.

En el presente artículo vamos a conocer varias cosas importantes sobre las vistas en CodeIgniter. Comenzaremos explicando cómo podemos pasar valores a las vistas para personalizarlas, de manera que muestren una información dada y no siempre el mismo texto fijo. Luego veremos que en las vistas podemos colocar cualquier código PHP, además del código HTML necesario para mostrar la información y que existen diversos esquemas de codificación alternativos en CodeIgniter, que podemos utilizar para ahorrar código fuente. Acabaremos mostrando cómo una vista puede devolver el texto resultado de procesarse a una variable, en vez volcarlo en la salida por defecto, es decir, en vez de enviarlo al cliente como código de la página.

Añadiendo datos dinámicos a las vistas

Una de las cosas más básicas que querremos hacer con las vistas es personalizar las informaciones que muestren a través de unas variables de configuración. Así, las vistas podrán mostrar diferentes datos con un mismo código.

Por ejemplo, pensemos que tenemos una vista con el código de una página completa, con el diseño propio de nuestro sitio. Esa vista podríamos estar usándola para todas las páginas del sitio web, pero en ese caso enviaremos distintas variables de configuración con los datos propios de cada página, como pueden ser el título de la página, el cuerpo, etc.

Todos esos datos se envían a través de un array asociativo que se pasa a la vista, y dentro de ella podremos acceder a cada uno de los elementos de ese array a partir del índice de ese elemento. Lo podremos ver fácilmente con un ejemplo.

Comenzamos por construir un array asociativo con los datos de la vista. En el código siguiente podemos ver el controlador que hicimos en el artículo anterior para mostrar el trabajo con vistas, en el que hemos añadido el código para generar el array asociativo y enviarlo a la vista.

<?php
class MiControlador extends Controller {

   function index(){
      
      $datos = array(
         'titulo' => 'Página de prueba',
         'descripcion' => 'Esta es la descripción de esta página, un poco más larga.',
         'cuerpo' => 'El cuerpo de la página probablemente será un texto muy largo...<p>Con varios párrafos</p>'
      );
      
      $this->load->view('mivista', $datos);
   }
   
}
?>

Ahora, en la vista, podemos acceder a todos los datos de ese array asociativo, como si fueran variables normales, a través de los nombre de los índices del array. Veamos el código de mivista.php que consume los datos que se le envían para configurar su contenido.

<html>
<head>
<title><?php echo $titulo?></title>
</head>
<body>
<h1><?php echo $titulo?></h1>
   <blockquote>
      <p><b><?php echo $descripcion?></b></p>
   </blockquote>
   <p><?php echo $cuerpo?></p>
</body>
</html>

Como estamos viendo, podemos mostrar los contenidos de las variables de configuración enviadas a la vista a través de simples instrucciones echo de PHP. Los datos que se reciben en la vista están disponibles por medio de variables normales, con nombres iguales a los índices del array asociativo que se envió al cargar la vista.

Código PHP dentro de las vistas

Las vistas en CodeIgniter son bastante flexibles y permiten ejecutar cualquier tipo de código PHP que necesitemos. En principio las acciones que necesitaremos codificar dentro de una vista serán bastante simples, como mostrar el contenido de variables, o realizar algún bucle por alguna estructura de datos.

Sin embargo, nada impide escribir código PHP, lo complejo que queramos, con accesos a recursos del servidor, bases de datos, etc. Sin embargo, insisto que si utilizamos correctamente las vistas, según como se debería a en el modelo - vista - controlador, no deberíamos hacer operaciones muy complicadas.

CodeIgniter dispone además de algunas estructuras de código, adicionales a las que existen en el propio PHP, que podemos utilizar dentro de las vistas y que nos pueden ayudar a reducir nuestro código o a esquematizarlo un poco más.

El primero de los códigos alternativos es muy útil, pues se trata de un resumen de la sentencia echo. Por ejemplo, el código siguiente:

<?php echo $variable?>

Se puede resumir por este otro:

<?=$variable?>

Del mismo código CodeIgniter dispone de estructuras de control if, for, foreach y while que se pueden escribir de una manera resumida, en comparación con las estructuras de control habituales en PHP. Ahora no vamos a explicar la sintaxis de estos elementos, por lo que recomendamos leer la documentación del framework para encontrar más referencias.

Nota: Estas maneras nuevas de hacer bucles y condicionales, en mi opinión, pueden ser útiles para usuarios que no conocen PHP, pero no merece mucho la pena aprenderlas si ya dominamos PHP, como probablemente ocurra si estamos leyendo este manual. Sin embargo, si la responsabilidad de crear las vistas cae sobre un diseñador que no conoce PHP, puede que le sea más sencillo utilizar, por ejemplo, el IF de CodeIgniter en vez del IF típico de PHP.

Todo depende de con qué se sienta más cómodo. La ventaja puede ser la sencillez y que en las estructuras de CodeIgniter no hace falta utilizar las llaves en los bucles o estructuras IF. Sin embargo, existe una desventaja y es que CodeIgniter necesitará preprocesar la vista para convertir las estructuras de código de CodeIgniter en las estándares de PHP y esto llevará un tiempo. Además, cuando tengamos un error de sintaxis en el código de una vista, si estamos utilizando las estructuras de control de CodeIgniter, es muy probable que la línea de código donde PHP informe del error no corresponda con la línea de código en la vista donde hemos hecho algo mal, lo que puede dar algún que otro dolor de cabeza en la etapa de depuración.

Revolver vistas como un dato de tipo string

Cuando cargamos una vista en CodeIgniter la salida producida por ella se envía al usuario visitante una vez hayan sido procesada la función del controlador que invoca las vistas. Este comportamiento es el estándar dentro del framework, pero también podríamos conseguir que el código HTML resultante de cargar una vista se devuelva al controlador para poder almacenarlo en una variable y hacer con él lo que podamos necesitar.

Esto lo conseguimos enviando un tercer parámetro al método que carga una vista, con un valor true, que indica justamente eso, que deseamos que el método devuelva el código procesado por la vista.

$cadena = $this->load->view('mivista', '', true);

La línea de código anterior provocaría que la carga de la vista se almacene en la variable $cadena. Como se puede ver, al llamar a la vista tenemos que indicar el nombre de la vista, seguido con el nombre del array que contiene los datos para configurar la vista (o comillas comillas si no estamos pasando datos a la vista), y finalmente el valor true como tercer parámetro. En un esquema como este, el contenido de la vista no se enviaría al navegador, a no ser que luego hagamos un echo de la variable $cadena o algo parecido.

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

nico_delagente

14/3/2010
Agregar hojas de estilo
Hola. En que carpeta de la aplicación me conviene almacenar los archivos css?
Descubrí que puedo usar el helper link_tag() pero no se cual es la ubicación recomendada oficialmente.
Muchas gracias!!!

Distriker

20/3/2010
Interesante
El tema este es bastante interesante, puedes hacer muchas cosas de una forma bastante limpia.

Saludos

Pako

09/6/2010
Enhorabuena y gracias
Pues eso, quería daros la enhorabuena y las gracias por este magnífico manual

belenxi

03/4/2013
Acceder a datos incrustados en una vista, desde JQuery
Hola a todos! Por favor, necesito vuestra ayuda. Intento hacer lo siguiente:

En el index de un controlador, llamo a una función de un modelo para recuperar datos de la BD (un listado de nombres, para ser más exactos). Después, con esos datos recuperados, cargo la vista inicial de la forma:

$this->load->view(lo_que_sea, $datos);

Por tanto, ya tengo los datos cargados en el html. Pero, lo que yo necesito ahora, es acceder desde el JQuery a esos datos, porque quiero que ese listado sea el "source" de un autocomplete de jquery-ui.

¿Cómo se haría esto de la mejor manera?