Vistas - Views

Una vista es simplemente una página web, o un fragmento de página, como un encabezado, pie de página, sidebar, etc. De hecho, las vistas se pueden incrustar de manera flexible en otras vistas (dentro de otras vistas, etc., etc.) si necesitas este tipo de jerarquía.

Las vistas nunca se llaman directamente, deben ser cargadas por un controlador. Recuerda que en un marco MVC, el controlador actúa como el policía de tráfico, por lo que es responsable de obtener una vista particular. Si no has leído la página de Controladores , debes hacerlo antes de continuar.

Usando el controlador de ejemplo que hemos creado en la sección del controlador , agreguémosle una vista.

Creando una vista

Usando nuestro editor de texto, creemos un archivo llamado blogview.php, y pongamos esto en él:

<html>
<head>
        <title>Mi Blog</title>
</head>
<body>
        <h1>Bienvenido a mi Blog!</h1>
</body>
</html>

Luego guardamos el archivo en el directorio application/views/

Cargando una vista

Para cargar un archivo de vista particular, usarás el siguiente método:

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

Donde "nombre" es el nombre del archivo de vista.

La extensión del archivo ".php" no necesita ser especificada a menos que use algo que no sea ".php".

Ahora, abrimos el archivo del controlador que creamos anteriormente llamado Blog.php, y reemplazamos la declaración "echo" con el método de carga de la vista:

<?php
class Blog extends CI_Controller {

        public function index()
        {
                $this->load->view('blogview');
        }
}

Si visitamos nuestro sitio usando la URL que hicimos anteriormente, deberíamos ver nuestra nueva vista. La URL era similar a esto:

ejemplo.com/index.php/blog/

Cargando vistas múltiples

CodeIgniter manejará de manera inteligente varias llamadas $this->load->view() desde un controlador. Si hay más de una llamada (vistas), se agregarán juntas. Por ejemplo, puedes desear tener una vista de encabezado, una vista de menú, una vista de contenido y una vista de pie de página. Eso podría parecer algo como esto:

<?php

class Pagina extends CI_Controller {

        public function index()
        {
                $data['page_title'] = 'Título de la página';
                $this->load->view('cabecera');
                $this->load->view('menu');
                $this->load->view('contenido', $data);
                $this->load->view('pie');
        }

}

En el ejemplo anterior, estamos usando "datos agregados dinámicamente", que vamos a ver a continuación.

Almacenamiento de vistas dentro de los subdirectorios

Los archivos de vistas también se pueden almacenar dentro de subdirectorios si prefieres ese tipo de organización. Al hacerlo, deberás incluir el nombre del directorio que carga la vista. Ejemplo:

$this->load->view('nombre_carpeta/nombre_archivo');

Agregando datos dinámicos a la vista

Los datos se pasan del controlador a la vista mediante una matriz (array) o un objeto en el segundo parámetro del método de carga de la vista. Aquí hay un ejemplo usando una array:

$data = array(
        'titulo' => 'Título de la página',
        'cabecera' => 'Cabecera',
        'mensaje' => 'Mensaje'
);

$this->load->view('blogview', $data);

Y aquí hay un ejemplo usando un objeto:

$data = new Algunaclase();
$this->load->view('blogview', $data);

Nota

Si utilizamos un objeto, las variables de clase se convertirán en elementos del array.

Vamos a intentarlo con el archivo de controlador. Ábrelo y añade este código:

<?php
class Blog extends CI_Controller {

        public function index()
        {
                $data['titulo'] = "Tìtulo de la página";
                $data['cabecera'] = "Mi Cabecera";

                $this->load->view('blogview', $data);
        }
}

Ahora abrimos el archivo de vista y cambiamo el texto a variables que corresponden a los datos del array:

<html>
<head>
        <title><?php echo $titulo;?></title>
</head>
<body>
        <h1><?php echo $cabecera;?></h1>
</body>
</html>

Luego, cargamos la página con la URL que hemos estado usando y deberíamos ver las variables reemplazadas.

Creando bucles

Los datos del array que pasamos a los archivos de vista no estás limitados a variables simples. Podemos pasar matrices multidimensionales, que se pueden enlazar para generar múltiples filas. Por ejemplo, si extraemos datos de nuestra base de datos, por lo general, tendremos la forma de una matriz multidimensional.

Aquí hay un ejemplo simple. Agregua esto a tu controlador:

<?php
class Blog extends CI_Controller {

        public function index()
        {
                $data['secciones'] = array('Política', 'Economía', 'Deportes');

                $data['titulo'] = "Título del blog";
                $data['cabecera'] = "Cabecera del blog";

                $this->load->view('blogview', $data);
        }
}

Ahora abrimos el archivo de vista y creamos un bucle:

<html>
<head>
        <title><?php echo $titulo;?></title>
</head>
<body>
        <h1><?php echo $cabecera;?></h1>

        <h3>Secciones</h3>

        <ul>
        <?php foreach ($secciones as $item):?>

                <li><?php echo $item;?></li>

        <?php endforeach;?>
        </ul>

</body>
</html>

Nota

En el ejemplo anterior estamos usando la sintaxis alternativa de PHP.

Devolviendo vistas como datos

Hay un tercer parámetro opcional que le permite cambiar el comportamiento del método para que devuelva los datos como una cadena en lugar de enviarlos a su navegador. Esto puede ser útil si deseas procesar los datos de alguna manera. Si establecemos el parámetro en TRUE (booleano), devolverá datos. El comportamiento predeterminado es FALSE, que lo envía a su navegador. Recuerda asignarlo a una variable si deseas que se devuelvan los datos:

$string = $this->load->view('mi_archivo', '', TRUE);