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

4jun/080

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 ;-)