Нашёл какой то скрипт рейтинга, решил его переделать.. Что бы выводились данные сразу в индексный файл и обновлялась инфа при ajax запросе... там ещё были id рейтингов, я вроде бы их убрал так как мне для 1 страницы нужно. В общем часть кода перенёс в Index.php другую в отдельный rate.php для обработки запросов.
Index.php:<?php
$rating = new ratings();
$rating->get_ratings();
class ratings {
var $data_file = './ratings.data.txt';
private $data = array();
function __construct() {
$all = file_get_contents($this->data_file);
if($all) {
$this->data = unserialize($all);
}
}
public function get_ratings() {
$lol = $this->data;
$rate = $lol['rate'];
$votes = $lol['votes'];
$stars = $lol['stars'];
?>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
$(document).ready(function() {
var widget = this;
$(widget).find('.star_<?php echo $stars; ?>').prevAll().andSelf().addClass('ratings_vote');
$(widget).find('.star_<?php echo $stars; ?>').nextAll().removeClass('ratings_vote');
$('.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());
}
);
$('.ratings_stars').bind('click', function() {
var star = this;
var widget = $(this).parent();
$.post(
'rate.php',
{
clicked_on : $(star).attr('class')
},
function(INFO) {
widget.data( 'fsr', INFO );
set_votes(widget);
},
'json'
);
});
});
function set_votes(widget) {
var avg = $(widget).data('fsr').stars;
var votes = $(widget).data('fsr').votes;
var exact = $(widget).data('fsr').rate;
$(widget).find('.star_' + avg).prevAll().andSelf().addClass('ratings_vote');
$(widget).find('.star_' + avg).nextAll().removeClass('ratings_vote');
$('#total').text('голосов '+votes);
$('#rate').text('рейтинг '+exact);
}
</script>
<div id="total">Голосов <?php echo $votes; ?></div>
<hr>
<div id="rate">Рейтинг <?php echo $rate; ?> </div>
<hr>
<div id="r1" 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>
<style>
.rate_widget {
border: 1px solid #CCC;
overflow: visible;
padding: 10px;
position: relative;
width: 180px;
height: 32px;
}
.ratings_stars {
background: url('star_empty.png') no-repeat;
float: left;
height: 28px;
padding: 2px;
width: 32px;
}
.ratings_vote {
background: url('star_full.png') no-repeat;
}
.ratings_over {
background: url('star_highlight.png') no-repeat;
}
.total_votes {
background: #eaeaea;
top: 58px;
left: 0;
padding: 5px;
position: absolute;
}
.movie_choice {
font: 10px verdana, sans-serif;
margin: 0 auto 40px auto;
width: 180px;
}
h1 {
text-align: center;
width: 400px;
margin: 20px auto;
}
</style>
<?php } } ?>
rate.php<?php
$rating = new ratings();
isset($_POST['fetch']) ? $rating->get_ratings() : $rating->vote();
class ratings {
var $data_file = './ratings.data.txt';
private $data = array();
function __construct() {
$all = file_get_contents($this->data_file);
if($all) {
$this->data = unserialize($all);
}
}
public function get_ratings() {
echo json_encode($this->data);
}
public function vote() {
preg_match('/star_([1-5]{1})/', $_POST['clicked_on'], $match);
$vote = $match[1];
$this->data['votes'] += 1;
$this->data['total_points'] += $vote;
$this->data['rate'] = round( $this->data['total_points'] / $this->data['votes'], 1 );
$this->data['stars'] = round( $this->data['rate'] );
file_put_contents($this->data_file, serialize($this->data));
$this->get_ratings();
}
}
?>
Данные хранятся в файле
ratings.data.txt в таком виде (a:4:{s:5:"votes";i:2;s:12:"total_points";i:8;s:4:"rate";d:4;s:5:"stars";d:4;})
так это выглядит )
Попозже найду плагин JQ и уберу значение stars картинка по значению rate будет выводиться.
Есть пару проблем когда обращаюсь напрямую
qwe.ru/rate.php то, что то он меняет значения в файле каким то левым образом ) и вопрос по правильности подсчёта общего рейтинга, как предотвратить накрутку ? что на счёт безопасности ? так как мне всего для 1 страницы нужно, сайт статичный лэндинг без mysql на html) по этому на файлах хочу сделать это дело, или лучше mysql ? что то мне кажется тут что то много лишнего и дырявого, можно же как то лучше с делать )))