Ver Mensaje Individual
  #6 (permalink)  
Antiguo 25/02/2014, 11:11
RaulCDT
 
Fecha de Ingreso: febrero-2014
Ubicación: Murcia
Mensajes: 119
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: consejo para star rating?

Crea en la BD

id | rating_id | rating_num | IP

y donde vayas a poner las estrellitas:

Código PHP:
<?php
//Query que retorna el numero de votos para un producto o servicio
$query_num_ratings =  mysql_query("SELECT COUNT(*) as num FROM services_rating WHERE rating_id=".$row_services['service_id'], $conexion);
//Numero de votos de un producto o registro
$num_ratings mysql_result($query_num_ratings0"num");

//Query que retorna la suma, el total de votos de un producto o servicio
$query_sum_ratings =  mysql_query("SELECT SUM(rating_num) as sum FROM services_rating WHERE rating_id=".$row_services['service_id'], $conexion);

//Si los votos son positivos
if(mysql_result($query_sum_ratings0"sum") > 0)
   
//Guardamos la suma
   
$sum_ratings mysql_result($query_sum_ratings0"sum");
else
   
//La suma vale 0
   
$sum_ratings 0;

$rating 0;    

//Si la suma de votos es mayor que 0
if ($num_ratings 0) {
   
//Calculamos el número de estrellas a pintar
   
$rating round($sum_ratings $num_ratings);
}
?>

<div id="rating<?=$row_services['service_id']?>" data="<?=$row_services['service_id']?>">
   <?php
   
//Por cada estrella
   
for ($i=1$i<=5$i++) {
      
//Si toca pintarla de verde
      
if ($i <= $rating)
         
//Mostramos estrella verde
         
echo '<div id="rating'.$row_services['service_id'].'_'.$i.'" data='.$i.'>&nbsp;</div>';
      else
         
//Mostramos estrella gris
         
echo '<div id="rating'.$row_services['service_id'].'_'.$i.'" data='.$i.'>&nbsp;</div>';
   }
   
?>

   <div id="sumrating" data="<?=$sum_ratings?>" style="display:none">&nbsp;</div>
   <div id="numrating" data="<?=$num_ratings?>" style="display:none">&nbsp;</div>
   <div id="actual" data="<?=$rating?>" style="display:none;">&nbsp;</div>
   <div class="ok" style="display:none;">&nbsp;</div>
</div>
y ya en el head

Código HTML:
<script type="text/javascript">
$(document).ready(function() {
    $('.estrella').click(function(){

        var parent = $(this).parent().attr('id');
        var service = $(this).parent().attr('data');
        var rating = $(this).attr('data');

        var dataString = 'id='+service+'&rating='+rating;

        $.ajax({
            type: "POST",
            url: "includes/addvote.php",
            data: dataString,
            success: function() {        
                var new_sum_rating = parseInt($('#'+parent+' #sumrating').attr('data')) + parseInt(rating);
                var new_num_rating = parseInt($('#'+parent+' #numrating').attr('data')) + 1;
                var new_rating = Math.round(new_sum_rating / new_num_rating);

                for(i=1;i<=new_rating;i++){
                    $('#'+parent+'_'+i+' .estrella').removeClass("estrella");
                    $('#'+parent+'_'+i+' .estrella').addClass("selected");
                }

                $('#'+parent+' .ok').empty();
                $('#'+parent+' #actual').empty();
                $('#'+parent+' #actual').append('('+new_rating+'/5) basado en '+new_num_rating+' votos!').fadeIn("slow");
                $('#'+parent+' .ok').append('Gracias por enviar tu voto!').fadeIn("slow");
                $('#'+parent+' #actual').fadeOut(5000);
                $('#'+parent+' .ok').fadeOut(5000);
            }

        });

    });  

    $('.estrella').hover(function(){
         var parent = $(this).parent().attr('id');

        $('#'+parent+' .estrella').css('background-image', 'url(images/estrella-gris.png)');

        for(i=1;i<=$(this).attr('data');i++){
            $('#'+parent+'_'+i).css('background-image', 'url(images/estrella-verde.png)');
        }

    });  
});    
</script> 
El archivo php que recibe los datos addvote.php simplemente hace un require de un archivo que conecta con la base de datos, recibe los datos mediante POST y los inserta en la tabla “rating_services” de la BD

Código PHP:
<?php
require('config.php');
$service $_POST['id'];
$rating $_POST['rating'];
$insert mysql_query("INSERT INTO services_rating (rating_id, rating_num) VALUES ('$service', '$rating')"$conexion);
?>
No se si te servira de algo