Перейти к содержанию
Форум поддержки пользователей VamShop

Сортировка в категории, если stock=0


Рекомендуемые сообщения

В VamShop 2 в Адмике - Оформление - Шаблоны - Шаблон категории поменял:

 
{content_listing template='product-listing' parent={$content_id} page={$page} type='product,downloadable' order='price-desc'}
 
на:
 

{content_listing template='product-listing' parent={$content_id} page={$page} type='product,downloadable' order='stock-desc'}

 

Теперь товары со стоком = 0 уходят в конец категории. Но при выборе сортировки сток перестает учитываться.

Можно ли сделать чтобы условие при открытии категории было следующее:
Сортировка по цене от меньшей к большей, по имени от А до Я, по стоку от большего к меньшему или сток 0 в конец списка

 

Кто-нибудь уже с этим сталкивался?

Как поправить код, чтобы условия учитывались?

Ссылка на сообщение
Поделиться на другие сайты
Верните price-desc сортировку.
 
А в /app/Vendor/smarty/vam_plugins/function.content_listing.php попробуйте поменять:
 
 
        if($params['order'] == 'price-desc' or $config['order'] == 'price-desc')
            $params['order_column'] = 'ContentProduct.price DESC';
 
 
на:
 
 
        if($params['order'] == 'price-desc' or $config['order'] == 'price-desc')
            $params['order_column'] = 'ContentProduct.price ASC, ContentProduct.stock DESC';
 
Ссылка на сообщение
Поделиться на другие сайты

Вернул price-desc

Поменял код

 

Фильтр по умолчанию стоит по возрастанию цены, но товар со stock = 0 перемещается в конец товаров с одинаковой стоимостью

Сортировка по цене при наличии в категории товаров со стоком 0 вообще перестает работать, остальные по имени и популярности работают

 

А как сделать, чтобы товары со стоком 0 уходили в конец списка при любых параметрах сортировки?

Ссылка на сообщение
Поделиться на другие сайты

Добавиьте , ContentProduct.stock DESC во все значения переменой  $params['order_column']

Там же в файле идёт целый блок кода, я Вам пример показал для price-desc, Вы этот код добавляйте и в других значениях.

Ссылка на сообщение
Поделиться на другие сайты

Вот там же блок кода идёт с заданием сортировки:

        if(!isset($params['order']) or !isset($config['order']))
            $params['order_column'] = 'Content.order ASC';
 
        if(isset($config['order']))
            $params['order'] = $config['order'];
 
        if($params['order'] == 'order' or $config['order'] == 'order')
            $params['order_column'] = 'Content.order';
 
        if($params['order'] == 'order-asc' or $config['order'] == 'order-asc')
            $params['order_column'] = 'Content.order ASC';
 
        if($params['order'] == 'order-desc' or $config['order'] == 'order-desc')
            $params['order_column'] = 'Content.order DESC';
 
        if($params['order'] == 'price' or $config['order'] == 'price')
            $params['order_column'] = 'ContentProduct.price';
 
        if($params['order'] == 'price-asc' or $config['order'] == 'price-asc')
            $params['order_column'] = 'ContentProduct.price ASC';
 
        if($params['order'] == 'price-desc' or $config['order'] == 'price-desc')
            $params['order_column'] = 'ContentProduct.price DESC';
 
        if($params['order'] == 'stock' or $config['order'] == 'stock')
            $params['order_column'] = 'ContentProduct.stock';
 
        if($params['order'] == 'stock-asc' or $config['order'] == 'stock-asc')
            $params['order_column'] = 'ContentProduct.stock ASC';
 
        if($params['order'] == 'stock-desc' or $config['order'] == 'stock-desc')
            $params['order_column'] = 'ContentProduct.stock DESC';
 
        if($params['order'] == 'name' or $config['order'] == 'name')
            $params['order_column'] = 'ContentDescription.name';
 
        if($params['order'] == 'name-asc' or $config['order'] == 'name-asc')
            $params['order_column'] = 'ContentDescription.name ASC';
 
        if($params['order'] == 'name-desc' or $config['order'] == 'name-desc')
            $params['order_column'] = 'ContentDescription.name DESC';
 
        if($params['order'] == 'id' or $config['order'] == 'id')
            $params['order_column'] = 'Content.id';
 
        if($params['order'] == 'id-asc' or $config['order'] == 'id-asc')
            $params['order_column'] = 'Content.id ASC';
 
        if($params['order'] == 'id-desc' or $config['order'] == 'id-desc')
            $params['order_column'] = 'Content.id DESC';
 
        if($params['order'] == 'ordered' or $config['order'] == 'ordered')
            $params['order_column'] = 'ContentProduct.ordered';
 
        if($params['order'] == 'ordered-asc' or $config['order'] == 'ordered-asc')
            $params['order_column'] = 'ContentProduct.ordered ASC';
 
        if($params['order'] == 'ordered-desc' or $config['order'] == 'ordered-desc')
            $params['order_column'] = 'ContentProduct.ordered DESC';

Везде и добавляйте по аналогии как это было в строке с price-desc

Ссылка на сообщение
Поделиться на другие сайты

Везде добавил, фильтр по цене не работает  и товары со стоком не уходят в конец.

Вот код. Что можно еще попробовать?

function smarty_function_content_listing($params, $template)
{
	global $config,$content,$filter_list;

        if(!isset($params['order']) or !isset($config['order']))
            $params['order_column'] = 'Content.order ASC, ContentProduct.stock DESC';

        if(isset($config['order']))
            $params['order'] = $config['order'];

        if($params['order'] == 'order' or $config['order'] == 'order')
            $params['order_column'] = 'Content.order, ContentProduct.stock DESC';

        if($params['order'] == 'order-asc' or $config['order'] == 'order-asc')
            $params['order_column'] = 'Content.order ASC, ContentProduct.stock DESC';

        if($params['order'] == 'order-desc' or $config['order'] == 'order-desc')
            $params['order_column'] = 'Content.order DESC, ContentProduct.stock DESC';

        if($params['order'] == 'price' or $config['order'] == 'price')
            $params['order_column'] = 'ContentProduct.price, ContentProduct.stock DESC';

        if($params['order'] == 'price-asc' or $config['order'] == 'price-asc')
            $params['order_column'] = 'ContentProduct.price ASC, ContentProduct.stock DESC';

        if($params['order'] == 'price-desc' or $config['order'] == 'price-desc')
            $params['order_column'] = 'ContentProduct.price ASC, ContentProduct.stock DESC';

        if($params['order'] == 'stock' or $config['order'] == 'stock')
            $params['order_column'] = 'ContentProduct.stock, ContentProduct.stock DESC';

        if($params['order'] == 'stock-asc' or $config['order'] == 'stock-asc')
            $params['order_column'] = 'ContentProduct.stock ASC, ContentProduct.stock DESC';

        if($params['order'] == 'stock-desc' or $config['order'] == 'stock-desc')
            $params['order_column'] = 'ContentProduct.stock DESC, ContentProduct.stock DESC';

        if($params['order'] == 'name' or $config['order'] == 'name')
            $params['order_column'] = 'ContentDescription.name, ContentProduct.stock DESC';

        if($params['order'] == 'name-asc' or $config['order'] == 'name-asc')
            $params['order_column'] = 'ContentDescription.name ASC, ContentProduct.stock DESC';

        if($params['order'] == 'name-desc' or $config['order'] == 'name-desc')
            $params['order_column'] = 'ContentDescription.name DESC, ContentProduct.stock DESC';

        if($params['order'] == 'id' or $config['order'] == 'id')
            $params['order_column'] = 'Content.id, ContentProduct.stock DESC';

        if($params['order'] == 'id-asc' or $config['order'] == 'id-asc')
            $params['order_column'] = 'Content.id ASC, ContentProduct.stock DESC';

        if($params['order'] == 'id-desc' or $config['order'] == 'id-desc')
            $params['order_column'] = 'Content.id DESC, ContentProduct.stock DESC';

        if($params['order'] == 'ordered' or $config['order'] == 'ordered')
            $params['order_column'] = 'ContentProduct.ordered, ContentProduct.stock DESC';

        if($params['order'] == 'ordered-asc' or $config['order'] == 'ordered-asc')
            $params['order_column'] = 'ContentProduct.ordered ASC, ContentProduct.stock DESC';

        if($params['order'] == 'ordered-desc' or $config['order'] == 'ordered-desc')
            $params['order_column'] = 'ContentProduct.ordered DESC, ContentProduct.stock DESC';
Ссылка на сообщение
Поделиться на другие сайты

Это ведь код для сортировки, к фильтрам он отношения не имеет.

 

Всё, что касается вывода товара в этом файле находится, что касается сортировки задаётся в параметре order

 

Пробуйте править код как Вам нужно.

Ссылка на сообщение
Поделиться на другие сайты

можно ли как-то прописать одновременно в шаблоне категории ?

 

order='price-asc' order='stock-desc'}

 

чтобы оба условия сработали для order по умолчанию

Ссылка на сообщение
Поделиться на другие сайты

Нет.

 

Но я ж Вам именно этот варант и предложил.

 

ContentProduct.price ASC, ContentProduct.stock DESC

 

Это и есть сортирофка поце и количеству на складе.

Ссылка на сообщение
Поделиться на другие сайты

да, я понял, просто с этим условием, получается, что колличество на складе сортируется в рамках цены

например

 

товар1 - 500руб - сток 5

товар2 - 100руб- сток 0

товар3 - 100руб- сток 5

товар4 - 300руб- сток 5

товар5 - 100руб- сток 5

 

сортируется

 

товар5 - 100руб- сток 5

товар3 - 100руб- сток 5

товар2 - 100руб- сток 0

товар4 - 300руб- сток 5

товар1 - 500руб - сток 5

 

а нужно получить

 

товар5 - 100руб- сток 5

товар3 - 100руб- сток 5

товар4 - 300руб- сток 5

товар1 - 500руб - сток 5

товар2 - 100руб- сток 0

 

видимо это парадокс )

Ссылка на сообщение
Поделиться на другие сайты

Поставьте ContentProduct.stock DESC на первое место.

Либо вообще оставьте только ContentProduct.stock DESC

 

Что б всегда по складу сортировалось, но тогда полоска сортировки смысла не будет иметь, если Вы поменяете везде значение на сортировку по складу.

Ссылка на сообщение
Поделиться на другие сайты

Тогда полоску сортировки вообще уберите, раз удалили варианты сортировки.

 

В Админке - Оформление - Микро-шаблоны - product_listing находится html-код полоски с сортировкой.

Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...