Creando nuestro Foro (Cuarta Parte): Los posts
Bueno, ahora la parte mas importante, tenemos que mostrar los posts, la idea es la misma que en los tutoriales anteriores. Primero de todo necesitaremos una "ruta" arriba de todo que nos indique el nombre del tema, así como la categoría de la que deriva, importante para que los usuarios no pierdan la pista de dónde están (obviamente serán links para volver atrás).
Pero vayamos por partes, primero de todo nueva función en el controller, que manejara los temas, al igual que lo hacía con las categorías:
function tema($id = 0)
{
if((int)$id< =0)
{
echo "Error, no existe una tema con esta id.";
}
else
{
$this->load->model("foros_model", "foros");
$this->load->model("usuarios_model", "usuarios");
$vars['query'] = $this->foros->getPosts($id);
$this->load->view("header");
$this->load->view("foros/tema", $vars);
$this->load->view("footer");
}
}
Ahora pasaremos al view, que tiene bastante chicha:
< ?php
echo '<h2><a href="index.php/foros/index">Foros</a> » <a href="index.php/foros/categoria/'.$this->foros->getPostsTemaParam((int)$this->uri->segment(3), "cat_id").'">'.$this->foros->getNombreCategoria($this->foros->getPostsTemaParam((int)$this->uri->segment(3), "cat_id")).'</a>: "'.$this->foros->getPostsTemaParam((int)$this->uri->segment(3), "titulo").'"';
if($query->num_rows() > 0)
{
foreach($query->result() as $row)
{
echo '<h4>'.$this->usuarios->getName($row->usuario_id).' dice:</h4>';
echo '<p>'.$row->cuerpo.'</p>';
}
}
else
{
echo '<p>No hay ninguna tema creado</p>';
}
?>
La primera linea, que es muy larga es para lo que os comentaba al principio. Como véis hago uso repetidamente de una función que he creado en el model, que nos dará toda la información que queramos del tema (titulo, id, categoría a la que pertenece).
Como veis la función es muy simple, jugamos con los parámetros que nos pasan y hacemos que la función sea genérica para nuestros propósitos, así la podemos reutilizar sin necesidad de crear una función especifica para cada cosa.
function getPosts($tema_id = 0)
{
$this->db->where("tema_id", $tema_id);
$this->db->order_by("id", "ASC");
$q = $this->db->get("forum_posts");
return $q;
}
function getPostsTemaParam($id, $param)
{
$this->db->where("id", $id);
$this->db->select($param);
$q = $this->db->get("forum_temas");
$r = $q->row_array();
return $r[$param];
}
Y bueno el trabajo está casi listo, esto ya tiene pinta de foro (cutre y sin estilos, pero eso es lo de menos ahora mismo). Lo que haría falta tanto en temas como en posts es un botón que nos lleve a un formulario para poder crear nuevos temas y nuevos posts. Pero eso es muy sencillo y seguro que todos sabréis hacerlo me imagino, ya que simplemente se trata de insertar información a la base de datos. Esto ya lo hemos visto en un tutorial anterior: Gestor de noticias.
También comentar que para un foro, obviamente necesitáis un sistema de usuarios, así que echadle un vistazo al que ya hicimos hace tiempo: Sistema de Usuarios.
La cosa ha quedado algo así:
----------

----------
Cualquier duda que tengáis podéis dejar un comentario o pasaros por el foro, quizá creéis que debería seguir el tutorial con la parte de añadir comentarios o tenéis alguna sugerencia para algún tema nuevo que os gustaría que hablase.
Sistema de Usuarios (Tercera parte): Usando la clase
Siguiendo la clase anterior (dónde construimos la clase Centinela), hoy toca acabar el sistema, creando la interfaz web para que los usuarios puedan registrarse, loguearse, desloguearse y acceder (o no) a secciones privadas.
Antes de empezar, deberíamos tocar algo de la configuración: ya que la clase centinela la cargaremos en la gran mayoría de veces, le diremos que nos la cargue siempre para mayor comodidad. Por lo que iremos a config/autoload.php y pondremos algo así como:
/*
| -------------------------------------------------------------------
| Auto-load Libraries
| -------------------------------------------------------------------
| These are the classes located in the system/libraries folder
| or in your system/application/libraries folder.
|
| Prototype:
|
| $autoload['libraries'] = array('database', 'session', 'xmlrpc');
*/
$autoload['libraries'] = array('database', 'session', 'centinela');
Una vez tenemos hecho esto, procederemos a crear las diferentes partes de la web dónde usaremos la clase.
Sistema de Usuarios (Segunda parte): Clase ‘Centinela’ II
Ahora procederemos a la parte mas importante de este tutorial dónde codificaremos las funciones de login, logout y check (comprobar), que explique a grandes rasgos como funcionarían en el articulo anterior.
Login
La función de login recibirá dos parámetros: usuario y contraseña que normalmente serán los que el usuario nos introduzca mediante un formulario. Pero también se usará para validarse automáticamente mediante las variables SESSION que tendremos almacenadas, asi siempre comprobaremos que las credenciales de los usuarios son siempre validas.
Entonces procederemos a comprobar que el usuario y la contraseña coinciden con la base de datos, si todo esta correcto crearemos las variables sesión (o las actualizaremos).
Aquí esta el código:
Sistema de Usuarios (Segunda parte): Clase ‘Centinela’ I
En la primera publicación de este taller planificamos de forma muy genérica como queríamos nuestro sistema de usuarios. Hoy vamos a concretar un poco más y empezaremos a definir como sera nuestra clase 'Centinela' que se encargará de controlar nuestro sistema.
Nuestra 'clase', será una librería por lo tanto nos miraremos en la fantástica guía de CodeIgniter cómo funcionan las librerías. En definitiva lo que nos interesa es que alojaremos nuestro "Centinela.php" en application/libraries. Nuestro archivo empezará con una mayúscula. Al principio de nuestro php pondremos para que no puedan acceder de manera no controlada a nuestra clase:
if(!defined('BASEPATH'))
exit('No direct script access allowed');
Nuestra clase necesitará de unas variables para que podamos almacenar los datos que usaremos:
- id: será la id de nuestro usuario un valor numerico y único.
- nick: será el nombre de nuestro usuario.
- clave: será la contraseña de nuestro usuario (encriptada)
- nivel: se refiere al nivel del usuario (invitado, operador, administrador, etc..). Como mayor sea el valor más alto será el cargo.
- auth: será una variable booleana. Si vale "TRUE", es que el usuario estará bien autentificado.
Malditos exámenes!
Bueno pido disculpas por este periodo de tiempo que no estoy escribiendo nada, pero la razón es esta: estoy de exámenes!
Así que lo primero es lo primero, hay que aplicarse para no suspender ninguna y asi tener todo el verano libre, de manera que intentare ir avanzando algo pero no puedo deciros exactamente cuando publicaré el siguiente post, estad atentos pues.
Para ir abriendo boca os diré cuales serán mis siguientes tres artículos, espero que os gusten:
- "Validation Class" y los buenos formularios
- Gestor de noticias (Sexta parte): Crear un buscador
- Sistema de Usuarios (Primera parte): Planificación y estructuras
Deseadme suerte ;-)
