|
|
|
ช่วยดูโค๊ดjquery rating ทีครับว่าแบบนี้จะให้คะแนนโหวตมันลงฐานข้อมูลยังไงครับ แล้วกําหนดวันนึงโหวตได้ครั้งเดียวยังไงครับ |
|
|
|
|
|
|
|
โค๊ด
Code (PHP)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd"
>
<html lang="en">
<head>
<title>AJAX 5 Star Rating</title>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
// This is the first thing we add ------------------------------------------
$(document).ready(function() {
$('.rate_widget').each(function(i) {
var widget = this;
var out_data = {
widget_id : $(widget).attr('id'),
fetch: 1
};
$.post(
'ratings.php',
out_data,
function(INFO) {
$(widget).data( 'fsr', INFO );
set_votes(widget);
},
'json'
);
});
$('.ratings_stars').hover(
// Handles the mouseover
function() {
$(this).prevAll().andSelf().addClass('ratings_over');
$(this).nextAll().removeClass('ratings_vote');
},
// Handles the mouseout
function() {
$(this).prevAll().andSelf().removeClass('ratings_over');
// can't use 'this' because it wont contain the updated data
set_votes($(this).parent());
}
);
// This actually records the vote
$('.ratings_stars').bind('click', function() {
var star = this;
var widget = $(this).parent();
var clicked_data = {
clicked_on : $(star).attr('class'),
widget_id : $(star).parent().attr('id')
};
$.post(
'ratings.php',
clicked_data,
function(INFO) {
widget.data( 'fsr', INFO );
set_votes(widget);
},
'json'
);
});
});
function set_votes(widget) {
var avg = $(widget).data('fsr').whole_avg;
var votes = $(widget).data('fsr').number_votes;
var exact = $(widget).data('fsr').dec_avg;
window.console && console.log('and now in set_votes, it thinks the fsr is ' + $(widget).data('fsr').number_votes);
$(widget).find('.star_' + avg).prevAll().andSelf().addClass('ratings_vote');
$(widget).find('.star_' + avg).nextAll().removeClass('ratings_vote');
$(widget).find('.total_votes').text( votes + ' votes recorded (' + exact + ' rating)' );
}
// END FIRST THING
</script>
<style>
.rate_widget {
overflow: visible;
position: relative;
width: auto;
height: 15px;
border-top-color: #FFF;
border-right-color: #FFF;
border-bottom-color: #FFF;
border-left-color: #FFF;
}
.ratings_stars {
background: url('star_empty.png') no-repeat;
float: left;
height: 15px;
padding: 2px;
width: 15px;
}
.ratings_vote {
background: url('star_full.png') no-repeat;
}
.ratings_over {
background: url('star_highlight.png') no-repeat;
}
.total_votes {
background: #eaeaea;
top: 21px;
left: 0px;
padding: 5px;
position: absolute;
}
.movie_choice {
font: 10px verdana, sans-serif;
margin-top: 0;
width: 131px;
}
h1 {
text-align: center;
width: 400px;
margin: 20px auto;
}
</style>
</head>
<body>
<div class='movie_choice'>
<div id="r2" class="rate_widget">
<div class="star_1 ratings_stars"></div>
<div class="star_2 ratings_stars"></div>
<div class="star_3 ratings_stars"></div>
<div class="star_4 ratings_stars"></div>
<div class="star_5 ratings_stars"></div>
<div class="total_votes">vote data</div>
</div>
</div>
</body>
</html>
rating.php
Code (PHP)
<?php
$rating = new ratings($_POST['widget_id']);
isset($_POST['fetch']) ? $rating->get_ratings() : $rating->vote();
class ratings {
var $data_file = './ratings.data.txt';
private $widget_id;
private $data = array();
function __construct($wid) {
$this->widget_id = $wid;
$all = file_get_contents($this->data_file);
if($all) {
$this->data = unserialize($all);
}
}
public function get_ratings() {
if($this->data[$this->widget_id]) {
echo json_encode($this->data[$this->widget_id]);
}
else {
$data['widget_id'] = $this->widget_id;
$data['number_votes'] = 0;
$data['total_points'] = 0;
$data['dec_avg'] = 0;
$data['whole_avg'] = 0;
echo json_encode($data);
}
}
public function vote() {
# Get the value of the vote
preg_match('/star_([1-5]{1})/', $_POST['clicked_on'], $match);
$vote = $match[1];
$ID = $this->widget_id;
# Update the record if it exists
if($this->data[$ID]) {
$this->data[$ID]['number_votes'] += 1;
$this->data[$ID]['total_points'] += $vote;
}
# Create a new one if it doesn't
else {
$this->data[$ID]['number_votes'] = 1;
$this->data[$ID]['total_points'] = $vote;
}
$this->data[$ID]['dec_avg'] = round( $this->data[$ID]['total_points'] / $this->data[$ID]['number_votes'], 1 );
$this->data[$ID]['whole_avg'] = round( $this->data[$ID]['dec_avg'] );
file_put_contents($this->data_file, serialize($this->data));
$this->get_ratings();
}
# ---
# end class
}
//function return_rating($raw_id) {
//
// $widget_data = fetch_rating($raw_id);
// echo json_encode($widget_data);
//}
//
//# Data is stored as:
//# widget_id:number_of_voters:total_points:dec_avg:whole_avg
//function fetch_rating($raw_id) {
//
// $all = file('./ratings.data.txt');
//
// foreach($all as $k => $record) {
// if(preg_match("/$raw_id:/", $record)) {
// $selected = $all[$k];
// break;
// }
// }
//
// if($selected) {
// $data = split(':', $selected);
// $data[] = round( $data[2] / $data[1], 1 );
// $data[] = round( $data[3] );
// }
// else {
// $data[0] = $raw_id;
// $data[1] = 0;
// $data[2] = 0;
// $data[3] = 0;
// $data[4] = 0;
// }
//
// return $data;
//}
//
//
//
//
//function register_vote() {
//
// preg_match('/star_([1-5]{1})/', $_POST['clicked_on'], $match);
// $vote = $match[1];
//
// $current_data = fetch_rating($_POST['widget']);
//
// $new_data[] = $current_data['stars'] + $vote;
// $new_data[] = $current_data['cast'] + 1;
//
//
// # --> This needs to be fixed, since a widget ID is ALWAYS passed in
// # it should be a class property
// file_put_contents($_POST['widget'] . '.txt', "{$new_data[0]}\n{$new_data[1]}");
//
// return_rating($_POST['widget']);
//}
//foreach($all as $k => $record) {
// if(preg_match("/$raw_id:/", $record)) {
// $selected = $all[$k];
// break;
// }
//}
//
//if($selected) {
// $this->data = split(':', $selected);
// $this->data[] = round( $this->data[2] / $this->data[1], 1 );
// $this->data[] = round( $this->data[3] );
//}
//else {
// $this->data[0] = $this->widget_id;
// $this->data[1] = 0;
// $this->data[2] = 0;
// $this->data[3] = 0;
// $this->data[4] = 0;
//}
?>
Tag : PHP
|
ประวัติการแก้ไข 2010-12-28 14:31:29 2010-12-28 14:36:28 2010-12-28 14:37:41
|
|
|
|
|
Date :
2010-12-28 14:29:57 |
By :
kenghockey |
View :
1107 |
Reply :
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 03
|