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
-~----------~----~----~----~------~----~------~--~---

Reply via email to