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

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

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

coder

Цитироватьв /classes есть подозреваемый имя ему - "Category.php"
В классе делай подсчет рейтинга.

induk

Цитата: coder от 23 апреля 2014, 12:24:33
Цитироватьв /classes есть подозреваемый имя ему - "Category.php"
В классе делай подсчет рейтинга.

Во вложении Category.php
подсчет рейтинга видимо это. Код из файла модуля.
function hookhook_rating($params)
{
if (!$this->getSetting('pros_cons_block'))
{
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'));
}
}


Не пойму где в "Классе" и как сделать пересчет.
Может мне основные файлы выложить?

coder

Файл Category.php не нужен, если не изменялся. Стандарный можно взять с оф.сервера.
В классе нужно добавить новую функцию, которая будет выбирать рейтинг в бд "product_avg" и склеивать значение рейтинга с набором товаров, массив возвращаемый методом getProducts. Потом в шаблоне  product-list.tpl можно будет использовать эту переменную.

induk

Цитата: coder от 23 апреля 2014, 18:33:21

В классе нужно добавить новую функцию, которая будет выбирать рейтинг в бд "product_avg" и склеивать значение рейтинга с набором товаров, массив возвращаемый методом getProducts. Потом в шаблоне  product-list.tpl можно будет использовать эту переменную.
Прилаживаю основные файлы. хук hook_rating
Проясните где это класс? мне не очень понятна формулировка.
И как добавить функцию которая будет выбирать рейтинг?

coder

Класс Category - описан в файле
/classes/Category.php.

Добавить новую функцию в него, значит переопределить этот файл. Создать новый файл с таким же именем в папке
/override/classes/Category.php

class Category extends CategoryCore
{
  public function getRaiting($id_product)
  {
   // Здесь код новой функции
  }
}


induk

Цитата: coder от 24 апреля 2014, 09:26:59
Класс Category - описан в файле
/classes/Category.php.

Добавить новую функцию в него, значит переопределить этот файл. Создать новый файл с таким же именем в папке
/override/classes/Category.php

class Category extends CategoryCore
{
  public function getRaiting($id_product)
  {
   // Здесь код новой функции
  }
}

В общем я так понял что необходимо создать файл /override/classes/Category.php с содержимым
class Category extends CategoryCore
{
  public function getRaiting($id_product)
  {
   // Здесь код новой функции
  }
}

но вопрос в том где взять код новой функции?
его нужно извлечь из файла модуля?
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);

induk

#36
Файлы модуля.
Подскажите где искать код функции?

coder

Тяжелый случай. Ты учился как создавать модули в prestashop или просто издевался?
Вот шаблон для каталога товаров. Замени в своей теме.

induk

Цитата: coder от 24 апреля 2014, 14:46:45
Тяжелый случай. Ты учился как создавать модули в prestashop или просто издевался?
Вот шаблон для каталога товаров. Замени в своей теме.
Случай действительно сложный, однако в итоге все работает!!! Спасибо!

А по решению есть пара вопросов.
Зачем я вообще создавал хук?

приведенный вами код  не использует advanced_review/product-list.tpl
хотя и обращается к нему, 
он использует шаблон (и не только) из файла модуля.
public function hookProductTab($params)
    {
$id_product = (isset($_GET['id_product'])) ? $_GET['id_product'] : 0;
return '<li><a href="#idTab665" id="reviews_tab" class="idTabHrefShort">'.$this->l('Отзывы').' ('.$this->countReviews($id_product).')</a></li>';


}


coder

Нужно было прочитать справку по модулю. Там все написано. Тогда и не делал бы лишние движения.
Этот модуль использует свой контроллер. Ничего в стандарных классах не нужно добавлять или менять для вывода рейтинга на странице товара. Просто добавить подключение модуля на странице категорий.

coder

Зато узнал как сделать свой модуль под престу :)

induk

#41
Цитата: coder от 24 апреля 2014, 15:45:18
Нужно было прочитать справку по модулю. Там все написано. Тогда и не делал бы лишние движения.
Этот модуль использует свой контроллер. Ничего в стандарных классах не нужно добавлять или менять для вывода рейтинга на странице товара. Просто добавить подключение модуля на странице категорий.
Работает, вроде без глюков.
А справка то где, по модулю?


Все нашел, и информация всегда была под носом!!!!