Ampliamos las posibilidades de esta primera aplicación web de prueba. Hacemos las modificaciones en el modelo, vistas y controlador para mostrar las páginas de artículos.
En las próximas modificaciones o mejoras en el código de nuestra aplicación de artículos pretendo hacer la parte en la que se muestran los artículos completos, es decir, las páginas que mostrarán cada uno de los artículos que tenemos en nuestra base de datos, con su texto completo.
En principio, los enlaces para acceder a estas páginas están en la portada de nuestra aplicación y los hemos hecho en la vista "home", creada anteriormente. Podemos observar que los enlaces de la portada, que nos mostraban los últimos 5 artículos publicados, van a URLs como estas:
http://localhost/index.php/articulos/muestra/1
http://localhost/index.php/articulos/muestra/4
Como se puede ver, tenemos una URL que pasa por el directorio artículos (el controlador de artículos), el directorio muestra (que es la función que tenemos que realizar en el controlador para atender esta URL) y el número del identificador del artículo que deseamos ver (que es el parámetro que se enviará a la función muestra() del controlador).
Así pues, tenemos que hacer varias cosas para que esas URL funcionen y muestren el contenido de los artículos.
9.- Ampliación del modelo
Ahora vamos a hacer el modelo para que tenga una función que devuelva los datos de un artículo cuyo identificador pasaremos por parámetro. La nueva función devolverá un array con los datos del artículo encontrado, o false en caso que no encuentre el artículo.
<?php
class Articulo_model extends Model {
function __construct(){
parent::Model();
}
function dame_ultimos_articulos(){
$ssql = "select * from articulo order by id desc limit 5";
return mysql_query($ssql);
}
function dame_articulo($id){
$ssql = "select * from articulo where id=" . $id;
$rs = mysql_query($ssql);
if (mysql_numrows($rs)==0){
return false;
}else{
return mysql_fetch_array($rs);
}
}
}
?>
Como se puede ver, es exactamente el modelo anterior, en el que hemos creado la función dame_articulo().
10.- Ampliación del controlador
En este momento queremos que el controlador de artículos también muestre las páginas con los artículos, que tendrán URL como estas:http://localhost/index.php/articulos/muestra/3
Así pues, tenemos que crear la función muestra() en el controlador, que recibe un parámetro que es el id del artículo que se desea ver. Esta función tendrá que solicitar al controlador los datos del artículo en cuestión y enviarlos a una vista para que lo muestre. Además, en caso que se intente acceder a artículos que no existen en la base de datos, tenemos que mostrar un error 404 de página no encontrada.
Pongo el código del controlador, tal como quedaría después de incorporar esta nueva función.
<?php
class Articulos extends Controller {
function index(){
//cargo el helper de url, con funciones para trabajo con URL del sitio
$this->load->helper('url');
//cargo el modelo de artículos
$this->load->model('Articulo_model');
//pido los ultimos artículos al modelo
$ultimosArticulos = $this->Articulo_model->dame_ultimos_articulos();
//creo el array con datos de configuración para la vista
$datos_vista = array('rs_articulos' => $ultimosArticulos);
//cargo la vista pasando los datos de configuacion
$this->load->view('home', $datos_vista);
}
function muestra($id){
//cargo el helper de url, con funciones para trabajo con URL del sitio
$this->load->helper('url');
//cargo el modelo de artículos
$this->load->model('Articulo_model');
//pido al modelo el artículo que se desea ver
$arrayArticulo = $this->Articulo_model->dame_articulo($id);
//compruebo si he recibido un artículo
if (!$arrayArticulo){
//no he recibido ningún artículo
//voy a lanzar un error 404 de página no encontrada
show_404();
}else{
//he encontrado el artículo
//muestro la vista de la página de mostrar un artículo pasando los datos del array del artículo
$this->load->view('muestra_articulo', $arrayArticulo);
}
}
}
?>
Nos tenemos que fijar en la nueva función creada: muestra(). En esta función cargamos el helper de URL (aun no hemos hablado de los helpers, pero lo veremos pronto). Luego cargamos el modelo de artículos y solicitamos el artículo al modelo. Luego comprobamos si existe el artículo. Si no existe, lanzamos un error 404, con la función show_404() (tampoco hemos visto aun la gestión de errores). Si existe, llamamos a la vista que debe mostrar el contenido completo del artículo, enviando el array con los datos del artículo encontrado.
Nos fijamos que la vista que solicitamos "muestra_articulo" no ha sido creada todavía.
11.- Creo la vista que muestra el artículo
Para acabar esta etapa de la construcción de nuestra web, vamos a crear la vista "muestra_articulo", que tiene que mostrar el contenido del artículo al usuario. Tiene un código muy sencillo.
<html>
<head>
<title><?=$titulo?></title>
</head>
<body>
<h1><?=$titulo?></h1>
<blockquote><b><?=$titulo?></b></blockquote>
<?=nl2br($cuerpo)?>
<p><a href="<?=site_url()?>">Volver</a></p>
</body>
</html>
Como se puede ver, se muestran todos los datos del artículo, con su título, descripción y cuerpo completo. Luego tenemos un enlace de volver que nos llevará a la portada del sitio, cuya URL obtenemos con la función site_url() que tenemos disponible al haber cargado el helper "url" en el controlador.
Ahora podemos comprobar, entrando a la portada del sitio, que los enlaces a los últimos artículos ya están funcionando. Si los pulsamos accederemos a las páginas que acabamos de hacer en esta etapa, en la que se nos muestra el contenido de los artículos. Si intentamos acceder a una URL de un artículo que no existe, como:
http://localhost/codeigniter/index.php/articulos/muestra/923
Podremos visualizar un error 404 de página no encontrada.
Hasta aquí tenemos nuestra aplicación que muestra artículos a sus visitantes, cargados en una base de datos. Es una aplicación incompleta, puesto que a poco que nos imaginemos, se nos ocurrirán multitud de cosas para mejorarla. Sin embargo, nuestro objetivo era más bien que los lectores sean capaces de entender el patrón de desarrollo de CodeIgniter, el MVC.
Quizás penséis que, siguiendo vuestras costumbres habituales de desarrollo en PHP, podríais haber hecho esta pequeña aplicación en menos tiempo y quizás con menos código fuente. No obstante, a medio plazo observaremos los beneficios de codificar por medio de los controladores, vistas y módulos, con los que obtendremos código más claro, organizado, y con mantenimiento más sencillo, entre diversas ventajas.
Miguel Angel Alvarez
Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...