Автор Тема: Сортировка товара  (Прочитано 148 раз)

02 Апреля 2015, 10:30:46
  • Фрилансер
  • *
  • Сообщений: 107
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Здравствуйте! Скажите, а как при выводе товара поставить собственную сортировку? У меня есть приоритетные товары, которые мне бы хотелось показать в начале списка. По имени, цене и артикулу как то не гоже...
02 Апреля 2015, 11:46:22
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 33010
  • Репутация: +26761/-0
    • Просмотр профиля
В классе /classes/Category.php в методе getProducts присвоит переменной $order_by нужное значение.
02 Апреля 2015, 11:49:02
Ответ #2
  • Фрилансер
  • *
  • Сообщений: 107
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В классе /classes/Category.php в методе getProducts присвоит переменной $order_by нужное значение.
И что это даст? Как мне указать какой товар приоритетный?
02 Апреля 2015, 12:01:48
Ответ #3
  • Ветеран
  • *****
  • Сообщений: 33010
  • Репутация: +26761/-0
    • Просмотр профиля
Это и есть сортировака по определенному признаку.
Клиент выбирает по имени, передается name и т.д.
if ($order_by == 'id_product' || $order_by == 'date_add' || $order_by == 'date_upd')
$order_by_prefix = 'p';
elseif ($order_by == 'name')
$order_by_prefix = 'pl';
elseif ($order_by == 'manufacturer')
{
$order_by_prefix = 'm';
$order_by = 'name';
}
elseif ($order_by == 'position')
$order_by_prefix = 'cp';
if ($order_by == 'price')
$order_by = 'orderprice';
02 Апреля 2015, 12:08:18
Ответ #4
02 Апреля 2015, 12:17:22
Ответ #5
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86191
  • Репутация: +25412/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Функция сортировки productSort в файле FrontController.php использует значения из админки.
// $this->orderBy = Tools::getProductsOrder('by', Tools::getValue('orderby'));
// $this->orderWay = Tools::getProductsOrder('way', Tools::getValue('orderway'));
// 'orderbydefault' => Tools::getProductsOrder('by'),
// 'orderwayposition' => Tools::getProductsOrder('way'), // Deprecated: orderwayposition
// 'orderwaydefault' => Tools::getProductsOrder('way'),
class Tools
/**
* Get products order field name for queries.
*
* @param string $type by|way
* @param string $value If no index given, use default order from admin -> pref -> products
* @param bool|\bool(false)|string $prefix
*
* @return string Order by sql clause
*/
public static function getProductsOrder($type, $value = null, $prefix = false)
{
Добавить нужно еще одно значение по полю "available_for_order" из таблицы "ps_product p"
02 Апреля 2015, 12:28:46
Ответ #6
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86191
  • Репутация: +25412/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Цитировать
И что это даст? Как мне указать какой товар приоритетный?
2 способа:
1. Это добавить установку сортировки через админку, как написано выше.
2. Или добавить в код сортировку по умолчанию
$order_by = 'по какому полю сортировать'