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

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.

En el controlador foros.php, añadiremos una nueva función:

< ?php 

	if (!defined('BASEPATH'))
		exit('No direct script access allowed');

	class Foros extends CI_Controller
	{

		function __construct()
		{
			parent::__construct();
		}

		function index()
		{
			$this->load->model("foros_model", "foros");

			$vars['query'] = $this->foros->getCategorias();
			$this->load->view("header");
			$this->load->view("foros/index", $vars);
			$this->load->view("footer");
		}

		function categoria($id = 0)
		{
			if((int)$id< =0)
			{
				echo "Error, no existe una categoría con esta id.";
			}
			else
			{
				$this->load->model("foros_model", "foros");			

				$vars['query'] = $this->foros->getTemas($id);
				$this->load->view("header");
				$this->load->view("foros/categoria", $vars);
				$this->load->view("footer");
			}
		}

	}

?>

Si os fijáis es casi idéntica a la del apartado anterior. Veamos que hemos incorporado una nueva función del model, para que nos dé los resultados y también creamos otra para una cosa que veremos mas adelante. El foros_model.php quedará con 2 nuevas funciones:

< ?php
	class Foros_model extends CI_Model
	{
		function __construct()
		{
			parent::__construct();
		}

		function getCategorias($padre = 0)
		{
			$this->db->where("padre", $padre);
			$q = $this->db->get('forum_cat');
			return $q;
		}

		function getNombreCategoria($id = 0)
		{
			$this->db->where("id", $id);
			$this->db->select("nombre");
			$q = $this->db->get("forum_cat");
			$r = $q->row();
			return $r->nombre;
		}

		function getTemas($cat_id = 0)
		{
			$this->db->where("cat_id", $cat_id);
			$q = $this->db->get("forum_temas");
			return $q;
		}
	}
?>

La segunda es idéntica a la que ya hicimos en el tutorial anterior, la primer lo que hará es que nos devolverá un nombre de la categoría a partir de la id que nosotros le demos.

Y ahora ya solo nos quedará crear el view para esta nueva sección views/foros/categoria.php:

< ?php
	echo '<h2><a href="index.php/foros/index">Foros</a> &raquo; '.$this->foros->getNombreCategoria((int)$this->uri->segment(3)).'';

	if($query->num_rows() > 0)
	{
		echo '<ul>';
		foreach($query->result() as $row)
		{
			echo '<li><a href="index.php/foros/temas/'.$row->id.'">'.$row->titulo.'</a></li>';
		}
		echo '</ul>';
	}
	else
	{
		echo '<p>No hay ninguna tema creado</p>';
	}
?>

En la primera linea, pondremos una ruta del foro, con el nombre de la categoría en la que nos encontramos (cosa que sabemos recogiendo la id de la URL y pasándola a nuestra función). Luego haremos un listado de los temas que hay en esa categoría.

como va quedando la cosa..

Bueno esto es todo por hoy, como veis poco a poco va cogiendo forma :)

¿Te gustó este artículo?

¡Suscríbete a nuestro feed RSS!

Comentarios (1) Trackbacks (0)
  1. Me da varios errores con los links u.u con el codigo que pones D= creo que tenemos algo diferente en la configuracion de apache


Leave a comment

(required)

Aún no hay trackbacks.