Jump to content

Звёздный рейтинг


Go to solution Solved by Noxter,

Recommended Posts

  • Replies 306
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Posted Images

product.tpl

<!-- Ретинг -->
<div class="testRater" id="product_{$product->id}">
<div class="statVal">
<span class="rater">
<span class="rater-starsOff" style="width:160px;"><span class="rater-starsOn" style="width:{$product->rating*160/5|string_format:"%.0f"}px"></span></span>
<span class="test-text">
<span class="rater-rating">{$product->rating|string_format:"%.1f"}</span> (голосов <span class="rater-rateCount">{$product->votes|string_format:"%.0f"}</span>)
</span>
</span>
</div>
</div>
<!-- Рейтинг (The End) -->

ajax-rater.js

$.fn.rater = function (options) {
var opts = $.extend({}, $.fn.rater.defaults, options);
return this.each(function () {
var $this = $(this);
var $on = $this.find('.rater-starsOn');
var $off = $this.find('.rater-starsOff');
opts.size = $on.height();
if (opts.rating == undefined) opts.rating = $on.width() / opts.size;
if (opts.id == undefined) opts.id = $this.attr('id');

$off.mousemove(function (e) {
var left = e.clientX - $off.offset().left;
var width = $off.width() - ($off.width() - left);
width = Math.ceil(width / (opts.size / opts.step)) * opts.size / opts.step;
$on.width(width);
}).hover(function (e) { $on.addClass('rater-starsHover'); }, function (e) {
$on.removeClass('rater-starsHover'); $on.width(opts.rating * opts.size);
}).click(function (e) {
var r = Math.round($on.width() / $off.width() * (opts.units * opts.step)) / opts.step;
$off.unbind('click').unbind('mousemove').unbind('mouseenter').unbind('mouseleave');
$off.css('cursor', 'default'); $on.css('cursor', 'default');
$.fn.rater.rate($this, opts, r);
}).css('cursor', 'pointer'); $on.css('cursor', 'pointer');
});
};

$.fn.rater.defaults = {
postHref: location.href,
units: 5,
step: 1
};

$.fn.rater.rate = function ($this, opts, rating) {
var $on = $this.find('.rater-starsOn');
var $off = $this.find('.rater-starsOff');
$off.fadeTo(600, 0.4, function () {
$.ajax({
url: opts.postHref,
type: "POST",
data: 'id=' + opts.id + '&rating=' + rating,
complete: function (req) {
if (req.status == 200) { //success
opts.rating = parseFloat(req.responseText);

if (opts.rating > 0) {
opts.rating = parseFloat(req.responseText);
$off.fadeTo(200, 0.1, function () {
$on.removeClass('rater-starsHover').width(opts.rating * opts.size);
var $count = $this.find('.rater-rateCount');
$count.text(parseInt($count.text()) + 1);
$this.find('.rater-rating').text(opts.rating.toFixed(1));
$off.fadeTo(200, 1);
});
//alert('Спасибо! Ваш голос учтен.');
}
else
if (opts.rating == -1) {
$off.fadeTo(200, 0.6, function () {
$this.find('.test-text').text('Вы уже голосовали!');
});
//alert('Вы уже голосовали за данный товар!');
}
else {
$off.fadeTo(200, 0.6, function () {
$this.find('.test-text').text('Вы уже голосовали!');
});
//alert('Вы уже голосовали за данный товар!');
}
} else { //failure
alert(req.responseText);
$on.removeClass('rater-starsHover').width(opts.rating * opts.size);
$this.rater(opts);
$off.fadeTo(2200, 1);
}
}
});
});
};

стили

.testRater{margin-bottom:20px;}
.rater span {vertical-align:middle;font-size:16px;}
.rater-rating {margin-top:5px;}
.rater-starsOff, .rater-starsOn {display:inline-block; height:32px; background:url(../images/stars.gif) repeat-x 0 0px;}
.rater-starsOn {display:block; max-width:160px; top:0; background-position: 0 -32px;}
.rater-starsHover {background-position: 0 -64px!important;}

Сама картинка
http://i.piccy.info/i7/d85050344b9d7acbb96e7da1ed8a9cd8/1-5-3951/3814500/stars.gif

Выглядит кошерно http://kiev-mod.ho.ua/products/samsung_s7070_diva/

Link to post
Share on other sites
  • 2 weeks later...

osben, Noxter мне вот интересно, хоть кто-нибудь вас отблагодарил??
Сам то я давно это сделал (рейтинг), с голосованием из списка и сортировкой по рейтингу, просто интересно...

Link to post
Share on other sites

Март ты придумал рейтинг, osben перенес на вторую симплу, а я красиво оформил и подправил яваскрипт чтобы не выскакивал дурноватый alert который пугает покупателей.
Марту от меня большое спасибо!

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...