Автор Тема: Случайная сортировка товаров  (Прочитано 1064 раз)

19 Декабрь 2015, 14:53:39
  • Новичок
  • *
  • Сообщений: 8
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Здравствуйте . В чем заключается проблема : пытаюсь сделать случайную сортировку товаров в категориях.
1)пытался сделать что бы не записывался id при создании товара , но выходит ошибка
2)просто сделать случайную сортировку , не знаю как . Помогите уже везде искал .
19 Декабрь 2015, 15:50:04
Ответ #1
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86688
  • Репутация: +25428/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Случайная сортировка товаров определена в классе /classes/Category.php
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)

Для страницы категорий в контроллере /controllers/front/CategoryController.php в методе assignProductList() укажите
$random = true
20 Декабрь 2015, 17:24:15
Ответ #2
  • Новичок
  • *
  • Сообщений: 8
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Для страницы категорий в контроллере /controllers/front/CategoryController.php в методе assignProductList() укажите
$random = true[/quote]
public function assignProductList()
{
$random = true;
Я добавил переменную , но все осталось также . Они не перемешиваются в случайном порядке.
Хотелось бы когда нажимают на определённую категорию генерировалась случайная последовательность товаров ,и не повторялись
товары на других страницах 1,2  и т.д
20 Декабрь 2015, 18:49:31
Ответ #3
  • Ветеран
  • *****
  • Сообщений: 16670
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
$this->cat_products = $this->category->getProducts($this->context->language->id, (int)$this->p, (int)$this->n, $this->orderBy, $this->orderWay, false, true, true);Вот так, а не
$random = true;
20 Декабрь 2015, 20:46:33
Ответ #4
  • Новичок
  • *
  • Сообщений: 8
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
$this->cat_products = $this->category->getProducts($this->context->language->id, (int)$this->p, (int)$this->n, $this->orderBy, $this->orderWay, false, true, true);Вот так, а не
$random = true;
Вышло так что выводится 1 товар и каждый раз случайно
21 Декабрь 2015, 10:36:20
Ответ #5
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86688
  • Репутация: +25428/-0
  • Сообщество PrestaShop
    • Просмотр профиля
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)
В этой функции указанны все параметры.
$random = false, $random_number_products = 1По умолчанию возвращат один товар. Если нужно больше, измените значение.
21 Декабрь 2015, 19:40:46
Ответ #6
  • Новичок
  • *
  • Сообщений: 8
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
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)
В этой функции указанны все параметры.
$random = false, $random_number_products = 1По умолчанию возвращат один товар. Если нужно больше, измените значение.
Спасибо Все работает и рандомит каждый раз ,но допустим Я перехожу на другую страницу все становиться по порядку как должно быть.Может быть это виноват blocklayered. Это можно как нибудь исправить?
22 Декабрь 2015, 12:03:20
Ответ #7
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86688
  • Репутация: +25428/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В blocklayered в функцию перехода по страницвм добавить тоже-самое.
18 Февраль 2016, 12:48:47
Ответ #8
  • Новичок
  • *
  • Сообщений: 36
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В blocklayered в функцию перехода по страницвм добавить тоже-самое.
Подскажите где именно, пожалуйста.
18 Февраль 2016, 12:54:30
Ответ #9
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
В файле /modules/blocklayered/blocklayered.php такой же метод getProducts, в нем и менять.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
18 Февраль 2016, 14:02:23
Ответ #10
  • Новичок
  • *
  • Сообщений: 36
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Ошибка сервера 500. Что-то не так делаю. :(
18 Февраль 2016, 14:22:53
Ответ #11
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86688
  • Репутация: +25428/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Включите показ ошибок в prestashop.
19 Февраль 2016, 12:52:34
Ответ #12
  • Новичок
  • *
  • Сообщений: 36
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Є краще вирішення проблеми:
в файлі blocklayered.php шукаємо:
ORDER BY  '.Tools::getProductsOrder('by', Tools::getValue('orderby'), true).' '.Tools::getProductsOrder('way', Tools::getValue('orderway')).' , cp.id_product'.
' LIMIT '.(((int)$this->page - 1) * $n.','.$n));

і додаємо RAND(): ORDER BY RAND(), '.Tools::getProductsOrder('by', Tools::getValue('orderby'), true).' '.Tools::getProductsOrder('way', Tools::getValue('orderway')).' , cp.id_product'.
' LIMIT '.(((int)$this->page - 1) * $n.','.$n));
04 Июнь 2017, 02:24:17
Ответ #13
  • Новичок
  • *
  • Сообщений: 1
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Цитировать
Є краще вирішення проблеми:
в файлі blocklayered.php шукаємо:

Специально зарегистрировался, чтобы сказать спасибо ssv_dreyf

От себя добавлю
вместо
ORDER BY  '.Tools::getProductsOrder('by', Tools::getValue('orderby'), true).' '.Tools::getProductsOrder('way', Tools::getValue('orderway')).' , cp.id_product'.
' LIMIT '.(((int)$this->page - 1) * $n.','.$n));


Лучше сделать:
ORDER BY '.Tools::getProductsOrder('by', Tools::getValue('orderby'), true).' '.Tools::getProductsOrder('way', Tools::getValue('orderway')).' , RAND(WEEK(CURDATE(),1))'.
' LIMIT '.(((int)$this->page - 1) * $n.','.$n), true, false);

В этом случае, во первых, не слетает сортировка при переключении страниц с первой на вторую и обратно.
Во вторых, работает сортировка по стоимости/названию.
В третьих, сортировка меняется каждую неделю )))

Удачи!