I never saw a decent solution to the cake when it comes to star rating Henrique Machado
2009/5/21 Faza <[email protected]> > > I'd start with removing DB connection related settings and replace all > querying to Cake functions - they all look like basic selects/inserts. > > Also you could divide whole this code into some controller functions to > tidy it up. > > Or read the code, understand it, and make a helper from scratch in > proper cake way :P > > cake_baker pisze: > > hey guys i searched the whole google i coudnt find any star rating > > helper for cakephp i found two they are oudated > > > > i found a star rating called ajaxstarrater_v122 its php and it stores > > it in database and i have no idea how to implement it to cakephp if > > some help here thank you in advance > > > > these are some code give u ideas > > > > > > this is the databse file > > > > <?php > > /* > > Page: _config-rating.php > > Created: Aug 2006 > > Last Mod: Mar 18 2007 > > Holds info for connecting to the db, and some other vars > > --------------------------------------------------------- > > ryan masuga, masugadesign.com > > [email protected] > > Licensed under a Creative Commons Attribution 3.0 License. > > http://creativecommons.org/licenses/by/3.0/ > > See readme.txt for full credit details. > > --------------------------------------------------------- */ > > > > //Connect to your rating database > > $rating_dbhost = 'localhost'; > > $rating_dbuser = 'root'; > > $rating_dbpass = 'root'; > > $rating_dbname = 'rating'; > > $rating_tableName = 'ratings'; > > $rating_path_db = ''; // the path to your db.php file (not > used > > yet!) > > $rating_path_rpc = ''; // the path to your rpc.php file (not > > used yet!) > > > > $rating_unitwidth = 30; // the width (in pixels) of each rating > > unit (star, etc.) > > // if you changed your graphic to be 50 pixels wide, you should > > change the value above > > > > $rating_conn = mysql_connect($rating_dbhost, $rating_dbuser, > > $rating_dbpass) or die ('Error connecting to mysql'); > > //mysql_select_db($rating_dbname); > > > > ?> > > > > > > > > this _drawrating.php > > > > > > <?php > > /* > > Page: _drawrating.php > > Created: Aug 2006 > > Last Mod: Mar 18 2007 > > The function that draws the rating bar. > > --------------------------------------------------------- > > ryan masuga, masugadesign.com > > [email protected] > > Licensed under a Creative Commons Attribution 3.0 License. > > http://creativecommons.org/licenses/by/3.0/ > > See readme.txt for full credit details. > > --------------------------------------------------------- */ > > function rating_bar($id,$units='',$static='') { > > > > require('_config-rating.php'); // get the db connection info > > > > //set some variables > > $ip = $_SERVER['REMOTE_ADDR']; > > if (!$units) {$units = 10;} > > if (!$static) {$static = FALSE;} > > > > // get votes, values, ips for the current rating bar > > $query=mysql_query("SELECT total_votes, total_value, used_ips FROM > > $rating_dbname.$rating_tableName WHERE id='$id' ")or die(" Error: > > ".mysql_error()); > > > > > > // insert the id in the DB if it doesn't exist already > > // see: > http://www.masugadesign.com/the-lab/scripts/unobtrusive-ajax-star-rating-bar/#comment-121 > > if (mysql_num_rows($query) == 0) { > > $sql = "INSERT INTO $rating_dbname.$rating_tableName > > (`id`,`total_votes`, `total_value`, `used_ips`) VALUES ('$id', '0', > > '0', '')"; > > $result = mysql_query($sql); > > } > > > > $numbers=mysql_fetch_assoc($query); > > > > > > if ($numbers['total_votes'] < 1) { > > $count = 0; > > } else { > > $count=$numbers['total_votes']; //how many votes total > > } > > $current_rating=$numbers['total_value']; //total number of rating > > added together and stored > > $tense=($count==1) ? "vote" : "votes"; //plural form votes/vote > > > > // determine whether the user has voted, so we know how to draw the ul/ > > li > > $voted=mysql_num_rows(mysql_query("SELECT used_ips FROM $rating_dbname. > > $rating_tableName WHERE used_ips LIKE '%".$ip."%' AND id='".$id."' > > ")); > > > > // now draw the rating bar > > $rating_width = @number_format($current_rating/$count,2)* > > $rating_unitwidth; > > $rating1 = @number_format($current_rating/$count,1); > > $rating2 = @number_format($current_rating/$count,2); > > > > > > if ($static == 'static') { > > > > $static_rater = array(); > > $static_rater[] .= "\n".'<div class="ratingblock">'; > > $static_rater[] .= '<div id="unit_long'.$id.'">'; > > $static_rater[] .= '<ul id="unit_ul'.$id.'" > class="unit-rating" > > style="width:'.$rating_unitwidth*$units.'px;">'; > > $static_rater[] .= '<li class="current-rating" > style="width:'. > > $rating_width.'px;">Currently '.$rating2.'/'.$units.'</li>'; > > $static_rater[] .= '</ul>'; > > $static_rater[] .= '<p class="static">'.$id.'. Rating: > <strong> '. > > $rating1.'</strong>/'.$units.' ('.$count.' '.$tense.' cast) <em>This > > is \'static\'.</em></p>'; > > $static_rater[] .= '</div>'; > > $static_rater[] .= '</div>'."\n\n"; > > > > return join("\n", $static_rater); > > > > > > } else { > > > > $rater =''; > > $rater.='<div class="ratingblock">'; > > > > $rater.='<div id="unit_long'.$id.'">'; > > $rater.=' <ul id="unit_ul'.$id.'" class="unit-rating" > > style="width:'.$rating_unitwidth*$units.'px;">'; > > $rater.=' <li class="current-rating" style="width:'. > > $rating_width.'px;">Currently '.$rating2.'/'.$units.'</li>'; > > > > for ($ncount = 1; $ncount <= $units; $ncount++) { // loop from 1 > > to the number of units > > if(!$voted) { // if the user hasn't yet voted, draw the > > voting stars > > $rater.='<li><a href="db.php?j='.$ncount.'&q='. > > $id.'&t='.$ip.'&c='.$units.'" title="'.$ncount.' out of '. > > $units.'" class="r'.$ncount.'-unit rater" rel="nofollow">'.$ncount.'</ > > a></li>'; > > } > > } > > $ncount=0; // resets the count > > > > $rater.=' </ul>'; > > $rater.=' <p'; > > if($voted){ $rater.=' class="voted"'; } > > $rater.='>'.$id.' Rating: <strong> '.$rating1.'</strong>/'. > > $units.' ('.$count.' '.$tense.' cast)'; > > $rater.=' </p>'; > > $rater.='</div>'; > > $rater.='</div>'; > > return $rater; > > } > > } > > ?> > > > > > > the db > > <?php > > /* > > Page: db.php > > Created: Aug 2006 > > Last Mod: Mar 18 2007 > > This page handles the database update if the user > > does NOT have Javascript enabled. > > --------------------------------------------------------- > > ryan masuga, masugadesign.com > > [email protected] > > Licensed under a Creative Commons Attribution 3.0 License. > > http://creativecommons.org/licenses/by/3.0/ > > See readme.txt for full credit details. > > --------------------------------------------------------- */ > > header("Cache-Control: no-cache"); > > header("Pragma: nocache"); > > require('_config-rating.php'); // get the db connection info > > > > //getting the values > > $vote_sent = preg_replace("/[^0-9]/","",$_REQUEST['j']); > > $id_sent = preg_replace("/[^0-9a-zA-Z]/","",$_REQUEST['q']); > > $ip_num = preg_replace("/[^0-9\.]/","",$_REQUEST['t']); > > $units = preg_replace("/[^0-9]/","",$_REQUEST['c']); > > $ip = $_SERVER['REMOTE_ADDR']; > > $referer = $_SERVER['HTTP_REFERER']; > > > > if ($vote_sent > $units) die("Sorry, vote appears to be invalid."); // > > kill the script because normal users will never see this. > > > > //connecting to the database to get some information > > $query = mysql_query("SELECT total_votes, total_value, used_ips FROM > > $rating_dbname.$rating_tableName WHERE id='$id_sent' ")or die(" Error: > > ".mysql_error()); > > $numbers = mysql_fetch_assoc($query); > > $checkIP = unserialize($numbers['used_ips']); > > $count = $numbers['total_votes']; //how many votes total > > $current_rating = $numbers['total_value']; //total number of rating > > added together and stored > > $sum = $vote_sent+$current_rating; // add together the current vote > > value and the total vote value > > $tense = ($count==1) ? "vote" : "votes"; //plural form votes/vote > > > > // checking to see if the first vote has been tallied > > // or increment the current number of votes > > ($sum==0 ? $added=0 : $added=$count+1); > > > > // if it is an array i.e. already has entries the push in another > > value > > ((is_array($checkIP)) ? array_push($checkIP,$ip_num) : $checkIP=array > > ($ip_num)); > > $insertip=serialize($checkIP); > > > > //IP check when voting > > $voted=mysql_num_rows(mysql_query("SELECT used_ips FROM $rating_dbname. > > $rating_tableName WHERE used_ips LIKE '%".$ip."%' AND id='". > > $id_sent."' ")); > > if(!$voted) { //if the user hasn't yet voted, then vote > > normally... > > > > > > if (($vote_sent >= 1 && $vote_sent <= $units) && ($ip == $ip_num)) > > { // keep votes within range > > $update = "UPDATE $rating_dbname.$rating_tableName SET > total_votes='". > > $added."', total_value='".$sum."', used_ips='".$insertip."' WHERE > > id='$id_sent'"; > > $result = mysql_query($update); > > } > > header("Location: $referer"); // go back to the page we came from > > exit; > > } //end for the "if(!$voted)" > > ?> > > > > > > ?> > > > > > > > > > > > > > > > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "CakePHP" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/cake-php?hl=en -~----------~----~----~----~------~----~------~--~---
