В рамках работы над очередными доработками движка Simpla необходимо было добавить возможность оценки товаров каталога. Как это сейчас водится — решили делать рейтинг со звездочками. Об том и статья…
Итак, первое что надо сделать — скачать плагин голосования для Simpla. Яваскрипт положим в папку скриптов нашего сайта — у меня в корне есть папка js, куда я его и определю. Там же лежит у меня и библиотека jquery (я ее во всех шаблонах использую — полезная вещь). Картинку counter.gif ложим в папку изображений шаблона /design/[ваш_шаблон]/images. И файл counter.php закидываем в корень сайта. Подготовительные работы сделали, теперь за программную часть.
Добавим в базу поля, где мы будет хранить оценку и количество голосов за товар. Поскольку мы оценивает весь товар, а не каждую из его вариации вполне логично хранить эти данные в таблице товаров. Выполняем следующий запрос

ALTER TABLE `products` ADD `rating` FLOAT(3,1) NOT NULL DEFAULT '0' AFTER `enabled`,
ADD `votes` INT NOT NULL DEFAULT '0' AFTER `rating`

Далее добавляем отображение в шаблоне нашего модуля в шаблоне. Сначала в файла стилей вставим код отображения

.rater>span {vertical-align:top;}
.rater-rating {margin-left:.8em}
.rater-starsOff, .rater-starsOn {display:inline-block; height:16px; background:url(../images/rating.gif) repeat-x 0 0px;}
.rater-starsOn {display:block; max-width:80px; top:0; background-position: 0 -16px;}
.rater-starsHover {background-position: 0 -32px!important;}

И теперь непосредственно выводим рейтинги в шаблон. В моем случае стояла задача голосования только в профайле товара, а в списке просто отображения рейтинга. В файл отображения списка товаров /design/[ваш_шаблон]/html/products.tpl вставляем внутри цикла

{foreach name=products item=product from=$products}
...
{/foreach}

в то место где в блоке товара хотели бы видеть рейтинг (обычно после названия товара) код вывода рейтинга

                    <div class="testRater clr" id="rating_{$product->product_id}" class="stat">
                        <div class="statVal">
                            <span class="rater">
                                <span class="rater-starsOff" style="width:80px;"><span class="rater-starsOn" style="width:{$product->rating*80/5|string_format:"%.0f"}px"></span></span>
                                <span class="rater-rating">{$product->rating|string_format:"%.1f"}</span>&#160;(голосов <span class="rater-rateCount">{$product->votes|string_format:"%.0f"}</span>)
                            </span>
                        </div>
                    </div>

Теперь в файле профайла /design/[ваш_шаблон]/html/product.tpl также после названия выводим рейтинг и функцию вызова модуля голосования (тут нет цикла, т.к. объект $product является глобальным для данного шаблона)

                    <div class="testRater clr" id="rating_{$product->product_id}" class="stat">
                        <div class="statVal">
                            <span class="rater">
                                <span class="rater-starsOff" style="width:80px;"><span class="rater-starsOn" style="width:{$product->rating*80/5|string_format:"%.0f"}px"></span></span>
                                <span class="rater-rating">{$product->rating|string_format:"%.1f"}</span>&#160;(голосов <span class="rater-rateCount">{$product->votes|string_format:"%.0f"}</span>)
                            </span>
                        </div>
                    </div>
{literal}
<script src="/js/jquery.js" type="text/javascript"></script>
<script src="/js/jquery.rater.js" type="text/javascript"></script>
<script type="text/javascript">$(function() { $('.testRater').rater({ postHref: '/rating.php' }); });</script>
{/literal}

Если Вы нигде до этого не вызываете библиотеку JQuery, то перед вызовом скрипта рейтинга надо вызвать ее.
И последний шаг — непосредственно получения данных из базы. Для этого откроем файл Storefront.class.php в корне сайта — будем править 2 функции get_products и get_product. В них надо выбрать 2 данных — наши rating и votes из таблицы products. В основном запросе в обоих функциях сразу после

products.model

добавляем

, products.rating, products.votes

Вот и все — проверяйте!
P.S. Как и прежде поощрения приветствуются. Это позволит реализовывать новые примочки и выкладывать. Кошельки справа.

Опубликовать в Яндекс
Опубликовать в Facebook
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в LiveJournal
Опубликовать в Google Plus
Опубликовать в Google Buzz