Автор Тема: Модуль "Дополнительные товары"  (Прочитано 1006 раз)

13 Август 2015, 02:46:53
  • Фрилансер
  • *
  • Сообщений: 237
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Возможно эту тему нужно было писать в разделе SEO...
Вопрос по блоку "Другие товары из той же категории"
Как сделать так, что бы в нем отображались парочка крайних товаров от открытого?
Попытаюсь по-понятнее: В "Других товарах" всегда отображаются первые товары из категории, а я хочу что бы было разнообразнее для каждого товара.. например, в каталоге у меня товар с названием "1", "2", ... "100", я хочу что бы открыв карточку "54" в дополнительных товарах отображались не "1", "2", "3" и "4", а "52", "53", "55", "56".
Вроде ясно разложил, спасибо))
13 Август 2015, 09:20:36
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 1614
  • Репутация: +32/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Переопределить нужно класс Category.php. В нем изменить функцию getProducts или добавить новую getProductsRange в ней добавить лимиты и условие
$lim1;
$lim2;
SELECT p.`id_product` BETWEEN $lim1 AND $lim2...

В модуле productscategory поменять в файле /modules/productscategory/productscategory.php
$category_products = $category->getProducts($this->context->language->id, 1, 100); /* 100 products max. */на
$category_products = $category->getProductsRange($this->context->language->id, 1, 100); /* 100 products max. */
13 Август 2015, 22:50:56
Ответ #2
  • Фрилансер
  • *
  • Сообщений: 237
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
совсем забыл добавить..стд шаблон 1.5 преста

а можно по подробнее.. про лимиты. Вставлять в classes/category.php ?
И как именно вставить

public function getProducts($id_lang, $p, $n, $order_by = null, $order_way = null, $get_total = false, $active = true, $random = false, $random_number_products = 1, $check_access = true, Context $context = null)
{

[color=red]$lim1;
$lim2;
SELECT p.`id_product` BETWEEN $lim1 AND $lim2...[/color]

if (!$context)
$context = Context::getContext();
if ($check_access && !$this->checkAccess($context->customer->id))
return false;

$front = true;
if (!in_array($context->controller->controller_type, array('front', 'modulefront')))
$front = false;

if ($p < 1) $p = 1;

if (empty($order_by))
$order_by = 'position';
else
/* Fix for all modules which are now using lowercase values for 'orderBy' parameter */
$order_by = strtolower($order_by);
так?
14 Август 2015, 11:52:43
Ответ #3
  • Ветеран
  • *****
  • Сообщений: 1614
  • Репутация: +32/-1
  • Сообщество PrestaShop
    • Просмотр профиля
$lim1 и $lim2 нужно сначала определить дополнительными sql запросами. Ид товара может идти не по порядку, поэтому нелья добавить 10,20.. к показанному ид товару. Создать 2 запроса. Для минимума 10/n товаров с
ORDER BY  p.`id_product` DESC;для максимума
ORDER BY  p.`id_product` ASC;По результатам запросов определить ид товара.
В обе стороны труднее выбирать товары. Можно только в одну. Тогда лимиты не нужны.
14 Август 2015, 11:54:09
Ответ #4
  • Ветеран
  • *****
  • Сообщений: 1614
  • Репутация: +32/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Модуль нужно делать новый, а не переделывать стандарный. Так проще. Не нужно будет менять стандарный класс prestashop. Стандарный модуль не приспособлем для такой задачи.
14 Август 2015, 13:19:56
Ответ #5
  • Фрилансер
  • *
  • Сообщений: 237
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
А подскажите примерную стоимость модуля) и готов ли тут кто нибудь его написать?)
14 Август 2015, 13:47:15
Ответ #6
  • Ветеран
  • *****
  • Сообщений: 16670
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
Стоимость от 0 и до... как договоритесь. Вам лучше самому стоимость озвучить. Если теоритически опредалять стоимось, то сделать модуль будет стоить в 5-10 раз дороже, чем подают готовый.
01 Ноябрь 2015, 16:31:08
Ответ #7
  • Фрилансер
  • *
  • Сообщений: 237
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В обе стороны труднее выбирать товары. Можно только в одну. Тогда лимиты не нужны.
а как сделать тогда что бы в одну сторону.. в большую? мне б главное что не грузило сервер и страницу)


видимо как то нужно изменить вот эти строчки?

// Get infos
$categoryProducts = $category->getProduct($this->context->language->id, 1, 5, 'id_product'); /* 100 products max. */
$sizeOfCategoryProducts = (int)sizeof($categoryProducts);
$middlePosition = 0;

01 Ноябрь 2015, 17:52:10
Ответ #8
  • Ветеран
  • *****
  • Сообщений: 1614
  • Репутация: +32/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Сервер все равно будет нагружать, немного, нр будет. Чтобю не грузино, не устанавливайте никаких модулей.
В одну сторону ничего не нужно, модуль и так грузит 10 товаров попорядку по позиции в админке.
01 Ноябрь 2015, 18:50:11
Ответ #9
  • Фрилансер
  • *
  • Сообщений: 237
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Пусть не много грузит, но не много)) модуль выдаёт первые товары в категории, а как сделать что б первые последующие?
02 Ноябрь 2015, 12:59:41
Ответ #10
  • Ветеран
  • *****
  • Сообщений: 1614
  • Репутация: +32/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Добавить опрделение id товара и условие больше этого id
WHERE p.`id_product` > $id_product