Вывод рейтинга товара в категории товара.

Автор induk, 16 апреля 2014, 23:01:32

« назад - далее »

induk

Нашел сайт где реализован вывод рейтинга товара, в категории товаров, (те возле каждого товара можно обнаружить рейтинг (звездочки) к товару не заходя в карточку товара)
используют стандартный модуль в престашопе, модуль называется "Отзывы о товарах v2.1 от PrestaShop"
Пример http://www.skay-shop.com.ua/108-samsung/
Как они смогли вывести рейтинг из модуля?

coder

#1
Вывести можно в любом месте, для этого нужно:
1. Добавить новый хук
- в файл productcomments.php, в метод install();
- в контроллер CategoryController;
- в шаблон product-list.tpl.
2. В модуле productcomments добавить вывод рейтинга для нового хука.
3. Создать шаблон tpl для блока рейтинга.
4. Добавить стили этого блока в product_list.css

induk

Цитата: coder от 17 апреля 2014, 11:56:00
Вывести можно в любом месте, для этого нужно:
1. Добавить новый хук
- в файл productcomments.php, в метод install();
- в контроллер CategoryController;
- в шаблон product-list.tpl.
2. В модуле productcomments добавить вывод рейтинга для нового хука.
3. Создать шаблон tpl для блока рейтинга.
4. Добавить стили этого блока в product_list.css

Спасибо за самый реальный ответ за длительное время.
Хотелось бы использовать вместо стандартного модуля с престы, модуль "Advanced Review v2.1"
Я так понимаю что это подойдет и для этого модуля, и для другого.

coder

Этот метод подходит для любого модуля.

induk

http://prestashop-forum.ru/index.php/topic,1669.0.html

Здесь есть информация о создании хука, все просто и понятно описано, однако непонятны формулировка,
ЦитироватьЛучше переопределить этот класс и создать в "override/classes/" файл FrontController.php, где описать новый хук:

У меня в пути "override/classes/"  нет файла FrontController.php, в этом каталоге есть только "_FrontController.php"

Понимаю так что нужно будет создать "FrontController.php" с содержимым
(с своими названиями хука конечно)
class FrontController extends FrontControllerCore {
        public function displayHeader()
        {
        if (!self::$initialized)
            parent::init();
        self::$smarty->assign(array(
                'HOOK_MYHOOK' => Module::hookExec('myhook')
                ));
               return parent::displayHeader();
}
}






Adik

Для prestashop 1.4 может не работать переопределение класса FrontController.
Попробуйте сначала добавить измения в базовый класс.

induk

Цитата: Adik от 18 апреля 2014, 14:48:36
Для prestashop 1.4 может не работать переопределение класса FrontController.
Попробуйте сначала добавить измения в базовый класс.
А как тогда добавить изменения в базовый класс, и пожалуйста если не составит труда, объясните что такое "Базовый класс".

Adik

Базовый - это стандарный, оригинальный.
/classes/FrontController.php
Ищите место где определяются хуки шаблона

self::$smarty->assign(array(
'HOOK_HEADER' => Module::hookExec('header'),
'HOOK_TOP' => Module::hookExec('top'),

и добавляете свой хук.

'HOOK_MYHOOK' => Module::hookExec('myhook'),

induk

Цитата: Adik от 18 апреля 2014, 15:18:12
Базовый - это стандарный, оригинальный.
/classes/FrontController.php
Ищите место где определяются хуки шаблона

self::$smarty->assign(array(
'HOOK_HEADER' => Module::hookExec('header'),
'HOOK_TOP' => Module::hookExec('top'),

и добавляете свой хук.

'HOOK_MYHOOK' => Module::hookExec('myhook'),


Сделал примерно как вы описали, рейтинг показывался но показывал отсутствие рейтинга просто серые звезды,
поковыряв и поискав аналоги в модуле пришел к выводу что нужно поставить в файл таким образом
function hookhook_rating($params)
{   


global $smarty;
$id_product = (isset($_GET['id_product'])) ? $_GET['id_product'] : 0;
$avg = Db::getInstance()->getRow('SELECT SUM(rt.`rate`)/COUNT(rt.`rate`) AS avg
FROM '._DB_PREFIX_.'invertus_reviews AS r
LEFT JOIN '._DB_PREFIX_.'invertus_review_ratings AS rt ON (rt.`review_id` = r.`id`)
WHERE r.`active` = "1" AND r.`product_id` = "'.$id_product.'"');
$product_avg = $avg['avg'];

$reviews_count = $this->countReviews($id_product);

$smarty->assign('product_avg', $product_avg);
$smarty->assign('reviews_count', $reviews_count);

return $this->display(__FILE__, '/rating_list.tpl');
}


В rating_list.tpl оставил только звездочки и тд, все работает замечательно, и правельно отображает рейтинг, НО только на странице товара...
Подскажете почему в категории товаров, звезды рейтинга отображают отсутствие  рейтинга?

induk

#9
В товарах (product.tpl) работает и хук - и исправно рейтинг,
на странице категории в файле product-list.tpl - хук работает а звездочки показывают что рейтинга нету т.е. серые звезды.
А нужно чтоб именно там и работало, в категориях(((


induk


DarinSr

Цитата: induk от 19 апреля 2014, 12:39:06
В товарах (product.tpl) работает и хук - и исправно рейтинг,
на странице категории в файле product-list.tpl - хук работает а звездочки показывают что рейтинга нету т.е. серые звезды.
А нужно чтоб именно там и работало, в категориях(((
Стили подключаются правильно?
Сравните код 2 страниц.

induk

Цитата: DarinSr от 22 апреля 2014, 11:45:46
Цитата: induk от 19 апреля 2014, 12:39:06
В товарах (product.tpl) работает и хук - и исправно рейтинг,
на странице категории в файле product-list.tpl - хук работает а звездочки показывают что рейтинга нету т.е. серые звезды.
А нужно чтоб именно там и работало, в категориях(((
Стили подключаются правильно?

стили не обязательны так как выводит просто картинки где желтая звездочка - выводит modules/advanced_review/icon/star.png
где серая  modules/advanced_review/icon/star_d.png
Хитростей со стилями нету.

ЦитироватьСравните код 2 страниц.

Поясните, что именно сравнить?

coder

#14
Если звезды показывает, то хук работает. Цвета регулируются стилями.