Автор Тема: Оцените товар. Рейтинг товара. Ставим звезды.  (Прочитано 15792 раз)

nictboom

  • Гость
Когда то сделал себе(набросал). пример например http://www.tehnoboom.com.ua/product/675-mitsubishi_srk28hg-s-src28hg-s/
в css/css_ваша_тема/stylesheet/stylesheet.css
.stars {position:relative; width:85px; height: 16px;background: url("../image/stars_voite.png") repeat-x left top;}
.stars span {visibility: hidden;height: 16px;width:17px;}
a.s1, a.s2, a.s3, a.s4, a.s5 {display:inline-block;position:absolute;height: 16px;width:17px; z-index:2;}
.stars a.s1 {left:0px;}
.stars a.s2 {left:17px;}
.stars a.s3 {left:34px;}
.stars a.s4 {left:51px;}
.stars a.s5 {left:68px;}
a.s1:hover, a.s2:hover, a.s3:hover, a.s4:hover, a.s5:hover, .cool, .bad {text-decoration:none;background: url("../image/stars_voite.png") repeat-x left -16px; z-index:1}
a.s1:hover {left:0px; width:17px;}
a.s2:hover {left:0px; width:34px;}
a.s3:hover {left:0px; width:51px;}
a.s4:hover {left:0px; width:68px;}
a.s5:hover {left:0px; width:85px;}
.cool, .bad {height: 16px; width:17px;}
.cool {background-position: left -32px;}
.bad {background-position: left top;}
.fl {float:left;}
в product_detailed.php после:                if ($a[23] != "" && CONF_CHPU) {$a[23] = REDIRECT_CATALOG."/".$a[23]."about/";} else {$a[23] = "index.php?about&category=".$a[0];}вставить:                if ($a[14] !="" && CONF_CHPU) {$a[29] = REDIRECT_PRODUCT."/".$a[14];} else {$a[29] = "index.php?productID=".$a[11];}

в product_detailed.tpl.html (где хотим видеть голосовалку):
<form action="./{$product_info[29]}" method="post" id="stars">
<input name="productID" value="{$product_info[11]}" type="hidden" />
<input name="vote" value="yes" type="hidden" />
<input name="mark" value="" type="hidden" />
<div>{$smarty.const.ADMIN_PRODUCT_RATING}: {$product_info[3]}&nbsp;(голосов: {$product_info[8]})</div>
<div class="stars fl">
    <a class="s1" href="#" onclick="$('input[name=\'mark\']').attr('value', '0.1');" rel="nofollow" title="Плохо"><span>0.1</span></a>
    <a class="s2" href="#" onclick="$('input[name=\'mark\']').attr('value', '1');" rel="nofollow" title="Не очень"><span>1</span></a>
    <a class="s3" href="#" onclick="$('input[name=\'mark\']').attr('value', '2.5');" rel="nofollow" title="Средне"><span>2.5</span></a>
    <a class="s4" href="#" onclick="$('input[name=\'mark\']').attr('value', '3.8');" rel="nofollow" title="Хорошо"><span>3.8</span></a>
    <a class="s5" href="#" onclick="$('input[name=\'mark\']').attr('value', '5');" rel="nofollow" title="Отлично"><span>5</span></a>
<div class="stars_res">
    {section name=i loop=5}{if $smarty.section.i.index<$product_info[3]}<div class="cool fl">&nbsp;</div>{else}<div class="bad fl">&nbsp;</div>{/if}{/section}
</div>
</div>
<div id="stars_show" class="fl" style="visibility: hidden; padding:2px 0 0 5px;"></div>
</form>
в core/js/js_scripts.js в конец добавить:
$(document).ready(function(){
    $('#stars a').attr('href', 'javascript:void(null)');
    $('#stars a').hover(function () {   
        if ($(this).is(':first-child')) {$('#stars_show').text($('#stars a').attr('title'));}
        else {$('#stars_show').text($(this).attr('title'));}
        $('#stars_show').css('visibility', 'visible');
        });
    $('#stars a').mouseout(function(){$('#stars_show').text('').css('visibility', 'hidden')});
    $('#stars a').click(function(){$('#stars').submit();});
    return false;
});
сама картинка, сохранить как stars_voite.png и положить в css/css_ваша_тема/image/:

вроде всё.))
ps/ чуть поправил.
« Последнее редактирование: Октября 28, 2012, 11:09:27 pm от nictboom »

nictboom

  • Гость
Цитировать
Плохо что происходит релоад страници =) имхо
Я бы сделал через jquery отправил приплюсовал или что там и вернул результат и всё без перезагрузки =)
Это же не трудно, строчек 10 ещё кода максимум =)
may be, но устроило в таком виде ))
Цитировать
И как мне кажется лучше делать, что бы голосовать можно было один раз для одного юзера, после того как проголосовал делать голосовалку неактивной, а просто показывать результаты
чёт не думал о всяких пакастях.

« Последнее редактирование: Июля 15, 2012, 02:45:10 pm от nictboom »

nictboom

  • Гость
Цитировать
По примеру на сайте, если проголосовать, а потом обновить страницу (F5), то просит повторно отправить данные, не есть гуд
может это из-за наличия голосовалки ещё и в отзывах?... я её там не убирал.
Цитировать
И как мне кажется лучше делать, что бы голосовать можно было один раз для одного юзера, после того как проголосовал делать голосовалку неактивной, а просто показывать результаты
а сессию использовать? так мне кажется проще. или не комильфо?..
например    if (isset($_SESSION["vote_completed"][ $productID ])) $vote_s = $_SESSION["vote_completed"][ $productID ];
    $smarty->assign("vote_s", $vote_s);
и в шаблоне {if $vote_s}результат{else}форма{/if}
« Последнее редактирование: Июля 16, 2012, 12:28:15 am от nictboom »

nictboom

  • Гость
Цитировать
И если и использовать сессии то все эти проверки можно выполнить на уровне smarty без php
О сенкс, это попробую.
Цитировать
но только доступ к повторному голосованию будет закрыт до конца сессии и всё =)
тут не понял... а чаво мы добивались? просто смысла особо не вижу на кукис садить посетителя на месяц, два или год..
« Последнее редактирование: Июля 17, 2012, 12:09:29 am от nictboom »

Оффлайн Bas916

  • Пользователь
  • **
  • Сообщений: 79
    • Просмотр профиля
После редактирования товара (даже если ничего и не редактировать, а просто нажать сохранить), рейтинг товара обнуляется. Как устранить данный нюанс? Где копать хотя бы?

Dionis_NA

  • Гость

сама картинка, сохранить как stars_voite.png и положить в css/css_ваша_тема/image/:

вроде всё.))
ps/ чуть поправил.

У меня при нажатии на звездочки происходит загрузка страницы 404 тоесть как бы Ява запрос обрабатываеться как ссыль(

nictboom

  • Гость
чуть поправил. up.
хотя можно и так: после                 $smarty->assign("product_category_path",$path);добавить                $smarty->assign("product_url",$row[0]); и в  форме <form action="./{$product_info[21]}"... заменить {$product_info[21]} на {$product_url}
просто пример был с моих наработок/изменений.
« Последнее редактирование: Июля 22, 2012, 08:32:26 pm от nictboom »

Оффлайн Bas916

  • Пользователь
  • **
  • Сообщений: 79
    • Просмотр профиля
в product_detailed.tpl.php после:                if ($a[23] != "" && CONF_CHPU) {$a[23] = REDIRECT_CATALOG."/".$a[23]."about/";} else {$a[23] = "index.php?about&amp;category=".$a[0];}вставить:                if ($a[14] !="" && CONF_CHPU) {$a[29] = REDIRECT_PRODUCT."/".$a[14];} else {$a[29] = "index.php?productID=".$a[11];}в product_detailed.tpl.html (где хотим видеть голосовалку):...
Ошибочка вышла однако. Вернее должно быть так:
в product_detailed.php после:                if ($a[23] != "" && CONF_CHPU) {$a[23] = REDIRECT_CATALOG."/".$a[23]."about/";} else {$a[23] = "index.php?about&amp;category=".$a[0];}вставить:                if ($a[14] !="" && CONF_CHPU) {$a[29] = REDIRECT_PRODUCT."/".$a[14];} else {$a[29] = "index.php?productID=".$a[11];}в product_detailed.tpl.html (где хотим видеть голосовалку):...
Очепятка в общем в первом посте :)