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.
Haciendo una buena instalación de CakePHP
Bueno lo primero que habrá que hacer es instalar correctamente CakePHP para empezar a probar y aprender un poquito.
- Nos dirijiremos a la página web de CakePHP y bajaremos la ultima versión, yo en este caso he bajado la versión "1.2.0.7945 RC4", supongo que cualquier versión que sea 1.2.xxx será todo igual. Pondremos todos los archivos bajados en nuestro servidor (ya sea local o remoto).
Ojo! Hay que tener activado el módulo "Mod_Rewrite", lo mas seguro esque ya lo tengáis activado, en este caso veréis algo parecido a esto [captura], en caso de que no lo tengáis activado veréis algo sin "estilos cargados" [captura].
- Ahora hay que darle permisos de escritura a la carpeta "tmp" dentro de la carpeta app/
- Pasamos a crear una base de datos y añadimos los datos de conexión en app/config/database.php
- Cambiamos la cadena de seguridad en app/config/core.php, donde pone "Configure::write('Security.salt', '*****');" ponemos cualquier combinación de letras y simbolos que queramos.
Si todo se ha configurar correctamente al acceder a la carpeta de la aplicación os tendran que salir 4 recuadros de color verde que os dicen:
Your tmp directory is writable.
The FileEngine is being used for caching. To change the config edit APP/config/core.php
Your database configuration file is present.
Cake is able to connect to the database.
Con esto ya seremos capaces de empezar a trabajar con CakePHP. Si os surge algún problema en la instalación no dudéis en preguntarmelo.
Empezamos con CakePHP

Bueno creo que ya van bastantes artículos sobre CodeIgniter, al menos -creo yo- para dar una base bastante buena a gente que empiece con él para que se pueda desenvolver en aplicaciones complejas. No es que me haya cansado o algo parecido, pero por razones de trabajo ahora tengo que "aprender" a usar otro framework de PHP, en este caso el agraciado es CakePHP.
En un primer vistazo puedo ver como tiene cosas muy parecidas a CodeIgniter (claro los dos son frameworks que siguen el modelo MVC) pero este es mucho mas estricto en ese tema.
Así que he pensado, porque no compartir con los lectores mi camino de aprendizaje de este nuevo framework, porque a veces es la mejor manera de aprender, con alguien que mas o menos esta a tu mismo nivel y que tiene los mismo problemas o dificultados a la hora de enfrentarse a este framework.
Por lo que de ahora en adelante creo que intentare focalizar algo mas en CakePHP, que la verdad que tiene mas "tela" que CI y es bueno saber un poco de todo para no encontrarte sorpresa en un futuro ¿no?
Enlaces: CakePHP
