Vistas en CodeIgniter

  • Por
  • PHP
Qué son las vistas y como debemos utilizarlas en CodeIgniter para maximizar las ventajas del modelo - vista - controlador.
Vamos a pasar a un nuevo tema en el Manual de CodeIgniter en el que comenzaremos las explicaciones de las vistas, parte fundamental en este framework PHP y en el patrón de desarrollo de aplicaciones que utiliza, llamado modelo - vista - controlador.

En artículos anteriores de DesarrolloWeb.com ofrecimos una buena introducción a los controladores, y aunque realmente no hemos visto todo lo que los controladores nos ofrecen, estamos en condiciones de aprender otras cosas jugosas en CodeIgniter, que seguro nos motivarán durante nuestro aprendizaje, al ver que todo es bastante sencillo de asimilar.

Qué son las vistas

Una vista es una página web o un fragmento que se guarda en un archivo aparte. En una vista podríamos guardar, por tanto, toda la estructura de una página, o si preferimos una organización más minuciosa y por módulos, podremos guardar simplemente una sección, como puede ser la cabecera, pie, barra de navegación, etc. El grado de complejidad en el trabajo con vistas podremos marcarlo nosotros, según nuestras preferencias, costumbres de desarrollo o necesidades específicas, dado que podremos anidar unas vistas dentro de otras en cualquier nivel de jerarquía.

Las vistas no se acceden ni se invocan directamente con la solicitud de una URL en nuestra aplicación web, como ya podremos suponer. En realidad son módulos que se invocan desde los controladores, ya que en el modelo - vista - controlador que implementa CodeIgniter, la lógica de nuestra aplicación se almacena en el controlador y es éste el que debe llamar a las vistas que necesite para mostrar los resultados al visitante.

Así pues, los controladores decidirán qué hacer cuando se reciba una solicitud y las vistas decidirán cómo mostrar los resultados. Por decirlo de otra forma, la lógica de nuestra aplicación residirá en el controlador y la vista mantendrá el aspecto de nuestra página, el diseño de la página que se mostrará al usuario.

Crear una vista

Crear una primera vista en nuestra aplicación web es muy sencillo. Simplemente creemos un archivo con un poco de código HTML.

<html lang="es">
<head>
<title>Mi página web</title>
</head>
<body>
<h1>Bienvenido a mi web</h1>
</body>
</html>

Ahora podemos guardar esa vista con el nombre que deseemos y extensión ,php, por ejemplo mivista.php, en el directorio de las vistas que es "system/application/views".

Cargar una vista

Como decíamos, podemos invocar una vista desde un controlador. De hecho, cada vez que deseemos mostrar en la página cualquier texto, debemos invocar a la vista que necesitemos, o al menos sería la manera de proceder, en vez de hacer sentencias "echo" o similares directamente en el controlador.

Para cargar una vista hacemos lo siguiente:

$this->load->view('nombreDeLaVista');

En 'nombreDeLaVista' tendremos que indicar el nombre del archivo donde hemos guardado la vista, pero sin el ".php".

Veamos entonces cómo quedaría un controlador que llama a la vista que hemos hecho antes en este artículo.

<?php
class MiControlador extends Controller {

   function index(){
      $this->load->view('mivista');
   }
   
}
?>

Este controlador lo guardamos en la carpeta de controllers con el nombre "micontrolador.php". Y ahora podremos acceder a él por medio de una URL como esta:

http://localhost/index.php/micontrolador

O si tenemos CodeIgniter instalado en nuestro dominio, con una URL como esta otra:

http://www.midominio.com/index.php/micontrolador

Deberíamos ver simplemente el contenido de esa vista creada anteriormente. Es así de simple.

Almacenar vistas en subdirectorios

Debemos colocar todas las vistas en el directorio "views" (system/application/views), pero si lo deseamos podemos organizarlas por subdirectorios, lo que puede servir de utilidad si vamos a manejar gran número de vistas distintas, que dependen de secciones variadas de la página.

Para ello simplemente creamos un subdirectorio con el nombre que queramos, dentro de "views" y guardamos allí las vistas. Por ejemplo pensemos que tenemos varias vistas que pertenecen todas a la zona de registro de usuarios y queremos organizarlas en la carpeta "registro" (ruta completa "system/application/views/registro"). Entonces, las vistas colocadas allí se invocarían indicando el subdirectorio donde se encuentran, de la siguiente manera:

$this->load->view('registro/formulario_registro');

Llamar a varias vistas desde un controlador

Nada impide que organicemos nuestro contenido por partes, en vistas distintas, de hecho es una buena práctica que nos ayudará a mantener nuestro código de una manera más sencilla. Llamar a las distintas vistas irá concatenando todo el código HTML creado por cada vista y luego se enviarán al navegador todas juntas como el resultado de procesar una página.

Podremos invocar varias vistas en una función de un controlador, de una manera similar a esta:

function cargarVistas(){
   //cargo una vista cabecera.php que está en el directorio plantillas
   $this->load->view('plantillas/cabecera');
   
   //cargo una vista llamada formulario_busqueda.php
   $this->load->view('formulario_busqueda');
   
   //creo un array de datos para enviarlo a una vista
   $datos['page_title'] = 'Mi Título';
   //cargo una vista llamada cuerpo.php a la que le mando un array de datos para configurarla
   $this->load->view('cuerpo', $datos);
   
   //cargo una vista que está en el directorio plantillas
   $this->load->view('plantillas/pie');
}

En este ejemplo hemos cargado varias vistas y en una de ellas le hemos enviado datos para configurar cómo se mostrará al visitante, en concreto la vista cuerpo.php. Esta utilidad es fundamental para que las vistas muestren cualquier información que se envíe desde los controladores y no solamente un texto siempre igual. En el próximo artículo sobre vistas aprenderemos a realizar esta acción.

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

Fidel Hernández

02/3/2010
Sobre el trabajo con las vistas
Hola amigos. Soy programador de PHP pero ahora estoy trabajando tambien como diseñador de las Webs que hago. Lo que necesito es lo siguiente.

Cuando diseño una Web con Code Igniter y tengo que hacerle las vistas. Primero se programa todo y despues de hace lo que el el diseño con los CSS y todo eso para las vistas o esto tiene otra forma de hacerse?

Por que yo estoy usando algunas plantillas para hacer estas cosas, pero me es engorroso el trabajo con los CSS por que cuando estoy diseñando el sitio no puedo ver bien lo que voy haciendo en la vista por que el CSS se lo agreguo dinamicamente.

Alguien tiene una sugerencia ?

Distriker

19/3/2010
Avanzando facilmente
Otro muy buen artículo, ahora voy entendiendo las estructuras de algunos programas que no entendía.

Saludos

Ivan

30/11/2010
excelente
wow que gran manual, muchas gracias

basic82

01/4/2011
Error en $this->load->view
Voy leyendo y probando, y me di cuenta que al $this->load->view("nombre") debí agregarle la extensión html, por lo que mi código quedó:

$this->load->view("nombre.html");

De otra forma daba error.

basic82

01/4/2011
$this->load->view en CodeIgniter 2.0.1
Para el CI 2.0.1 se tratan las vistas como archivos php. Entonces, el $this->load->view("mivista") Funciona si el archivo mivista es de extensión php.

falin

04/8/2011
La carga de controladores no hace nada
Hola, en primer lugar, muy buen tutorial estoy aprendiendo mucho sobre CodeIgniter, pero me he topado con un problema y es el siguiente:

Al crear un controller y cargarlo desde firefox 4 no hace nada, no da ningun error, simplemente no hace nada y he hecho varias pruebas incluso con el primer ejemplo que se muestra aqui que es el mas simple.

A ver si alguien me puede echar una mano, Gracias a todos.

cazaplanetas

30/10/2011
un extraño caracter al inicio de las vistas
Me pasa algo muy raro. Las vistas de codeigniter se generan con una tabulacion en la primera linea, que al guardar la pagina, y editarla con notepad++ me aparece como una especie de acento, pero no se que carácter es.

El caso es que este acento hace que IE9 no interprete bien la pagina y por ejemplo, no me centre los <div>.

Alguien puede ayudarme please??

cazaplanetas

31/10/2011
vistas en UTF-8
Bueno, he descubierto que si guardo la vista con formato ANSI, esto se corrige. Antes las estaba guardando en UTF-8.

Sigo sin entender porque esto es un problema para codeigniter.

Alguien sabe porque??

cazaplanetas

31/10/2011
problemas con utf-8
Vale, ya he solucionado mi problema.

Resulta que cualquier archivo que usara en la aplicacion, ya fuera controlador, modelo o vista, codificado en Notepad++ como UTF-8, daba un fallo final en la vista.

Lo he arreglado cambiando todos los archivos de mi aplicación a UTF-8 sin BOM.

Espero que esta información le valga a alguien, porque a mi me a tenido loco unos días.

Maria Troya

08/3/2017
Ayuda cerrar una vista
Hola queria una ayudita resulta que utilizo
$this->load->view("creditosl", $res);
para cargar la vista, ahora necesito que se cierre automaticamente despues de guardar los cambios...alguien que me ayude se los agradezco mucho...!!