En busqueda del web 2.0
Votos con CodeIgniter
Hacer un sistema de votos para articulos no es tan dificil, y creo que mucho mas sencillo si usamos CodeIgniter:
Cosas que haremos: tener un articulo y en este articulo tener un formulario con radio button para valorar el articulo.
Veamos:
Nota: no vamos a profundizar sobre que cosas es CodeIgniter, este tutorial es para personas que por lo menos lo ha utilizado una vez y todo le ha salido bien.
Controlador de articulos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | class Articulos extends Controller{ function Articulos(){ // constructor parent::Controller(); } function index(){ // index de nuestra seccion articulos // aqui no me toca hacer nada, este tutorial no es para mostrar un listado de articulo en nuestro index } function articulo($id=0){ $data['titulo'] = 'Valoracion via votos'; $data['query'] = $this->model_articulos->get($id); $data['votos'] = $this->model_votos->get($id); $this->load->vars($data); $this->load->view('articulo_view.php'); } function votar(){ $articulo = $this->input->post('articulo_id'); $voto = $this->input->post('voto'); $votar = $this->model_votos->votar($articulo,$voto); if($votar){ redirect('/articulos/articulo/'.$articulo); } } } |
Eso es todo para nuestro controlador
Modelo de Votos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | class Model_votos extends Model{ const TABLA = "votos"; function Model_votos(){ // constructor parent::Model(); } function votar($articulo,$voto){ $query = $this->db->get_where(self::TABLA,array('articulo_id'=>$articulo)); if($query->num_rows()>0){ $this->db->where('articulo_id',$articulo); $this->db->set('votos','votos + 1', FALSE); $this->db->set('puntos','puntos + '.$voto, FALSE); $this->db->update(self::TABLA, $this); }else{ $this->articulo_id = $articulo; $this->votos = 1; $this->puntos = $voto; $this->db->insert(self::TABLA, $this); } } function get($id){ $query = $this->db->get_where(self::TABLA,array('articulo_id'=>$id)); return $query->row(); } } |
Eso es todo para nuestro modelo de votos
Modelo de Articulos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class Model_articulos extends Model{ const TABLA = "articulos"; function Model_articulos(){ // constructor parent::Model(); } function get($id){ $query = $this->db->get_where(self::TABLA,array('id'=>$id)); return $query->row(); } } |
Eso es todo para nuestro modelo de articulos
Vista para mostrar la data:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <html> <head> <title> < ?php echo $titulo;?> </title> </head> <body> <h1>< ?php echo $query->titulo;?></h1> < ?php echo $query->contenido;?> <!-- y ahora el formulario para votos --> <b>Valoración:</b> (< ?php echo @round($votos->puntos/$votos->votos,2);?>), <b>Votos</b>: (< ?php echo $votos->votos;?>) <form action="<?php echo base_url();?>articulos/votar" method="post" name="form_voto"> < ?php echo form_hidden('articulo_id', $query->id); for($i=1;$i< =10;$i++){ ?> <input type="radio" name="valor" value="<?php echo $i;?/>" onclick="this.form.submit(); "/> < ?php echo $i;?> < ?php } ?> </form> </body> </html> |
Eso es todo para nuestra vista (articulo_view.php)
Y nuestra tabla mysql esta compuesta por los siguientes campos
1 2 3 4 5 | CREATE TABLE `votos` ( `articulo_id` int(11) NOT NULL default '0', `votos` int(11) NOT NULL default '0', `puntos` int(11) NOT NULL default '0' ) TYPE=MyISAM; |
Espero les ayude, todo esto debe funcionar, recuerde que el formulario se envia inmediatamente se hace click en el radio button via onClick


