¡No Quiero Programar! PHP, CodeIgniter y otros frameworks!

25feb/113

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> &raquo; <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í:

----------

Como quedó el foro

----------

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.

22feb/111

Creando nuestro Foro (Tercera parte): Los temas

Bueno, ahora ya teníamos el listado de categorías funcionando, así que profundizaremos un nivel mas, los temas. Para que nos entendamos veamos que profundidades tendremos en el foro:

Foro > Categorías > Temas > Posts

Empezando a programar me di cuenta que harían falta unos retoques en la base de datos, pues necesito una tabla para los "temas" que no había creado. Como el tutorial lo voy haciendo poco a poco a medida que lo hago, también me doy cuenta de errores y cosas que me olvido, y como ya os avisé, la base de datos siempre hay que adaptarla.

Veamos la nueva tabla "forum_temas", de momento tendrá estos campos (y de paso una fila de ejemplo):

Tabla de los temas

Como suponéis, cat_id hará referencia a la id de la categoría.

Luego también necesitaremos unos cambios en la tabla "forum_posts", pues añadiendo la anterior hay algunos campos que ya no necesitamos.

nueva tabla de posts

Hemos incorporado el tema_id, sustituyendo a padre, para que quede mas claro hacía donde es la referencia. También hemos quitado el titulo, porque ya lo lleva la tabla anterior.

Ahora ya pasamos a la programación en PHP y CodeIgniter.

20feb/112

Creando nuestro Foro (Segunda parte): Las categorías

Bueno ha llegado el momento de ponerse a programar en CodeIgniter, pues ya tenemos las bases de datos creadas. Para empezar pondremos algunos valores en la base de datos, en la tabla de categorías, por ejemplo estas:

categorías en la base de datos

Os podéis fijar, tal y como os comenté en el post anterior como funciona el tema del "padre", simplemente hace referencia a la ID a la cual pertenece. En este caso tenemos la categoría padre (definida por padre=0) "General" y sus hijos son "Noticias" y "Off-topic", de todas maneras luego lo veréis mas claro.

Ahora necesitaremos las 3 partes fundamentales del modelo MVC que son: la vista, el controlador y el modelo, asi que lo vamos a crear.

  1. El controlador: controllers/foros.php
  2. El modelo: models/foros_models.php
  3. Las vistas irán dentro de la carpeta views/foros, y crearemos index.php

Una vez tenemos creados estos 3 archivos empezaremos a hilar un poco todo para empezar a mostrar las categorías. Empezaremos por el modelo, es el que nos ayudara a comunicarnos con la base de datos, el código será este de momento:

16mar/094

Extender Helpers en CodeIgniter

Los 'Helpers' de CodeIgniter son básicamente pequeñas librerías con 4 o 5 funciones que nos dan funcionalidades que nos ayudan con los problemas típicos al crear webs. A medida que vayamos experimentando y avanzando con la programación de una web nos encontraremos con que necesitamos añadir nuevas funcionalidades a los helpers existentes o a veces modificar las que ya están hechas.

Podemos pensar en ir a la carpeta "system" ahí buscar el helper y modificarlo. Si, se puede hacer pero es una manera muy "guarra" de proceder, básicamente por dos razones:

  • Nos actualizan el CodeIgniter y coincide que modifican ese helper, vamos a tener un problema.
  • Queremos reutilizar código, es muy engorroso ir haciendo copy&paste de funciones de algunos helpers.