¡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.

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.