Показ товаров в категории Shop-Script

Во всех магазинах товар имеет свойство заканчиваться. Однако мы все надеемся на лучшее и временно отсутствующий товар с сайта не убираем.

В ShopScript есть 2 пути не дать заказать пользователю отсутствующий товар — включить в разделе «Настройки ->Корзина и оформление заказов» опцию «Вести учет товаров на складе» и тогда в свойствах товара надо будет вести количество по каждой позиции. Второй путь проще: установить товару нулевую цену, тогда ShopScript не будет показывать для этого товара ссылку на добавление в корзину.

Лично я предпочитаю второй путь, он для меня немного проще.

Однако, при показе товаров в категории ShopScript сортирует их по полям sort_order (порядок сортировки) и name (название). Из-за этого отсутствующие товары идут вперемешку с наличиствующими. Хотелось бы наоборот, чтобы те товары, которых в данный момент нет в наличии отображались бы в конце списка и на это не влиял выбор порядка сортировки (по имени, по цене и т.п.). То есть, чтобы все типы сортировок, которые науказывал посетитель применялись к тем товарам, которые можно заказать, а отсутствующие были все равно в конце списка.

Соседи вчера попросили сделать для них такой тип отображения. Чтобы не мучиться, я решил его сделать неотключаемым, просто добавить в запрос к базе данных на выборку товаров из категории еще одно правило. Оно должно быть первым, чтоб было самым главным :-) Вероятно я мог что-то упустить, но, с виду все работает как ожидается. Для сортировки по условию «поле Price равно нулю или нет» я использовал функцию MySQL IF(). Должен получаться вот такой запрос:

Если используется учет количества товаров, то вместо поля Price надо использовать поле in_stock, как я понимаю.

За получение списка товаров для показа отвечает функция prdSearchProductByTemplate в файле core_functions/product_functions.php. Функция здоровая, из нее нам нужен кусок, который начинается с:

Вот эту строчку и всю ересь далее удаляем, вплоть до строчки

Строка выше должна остаться. ;-) Перед ней вставляем вот такой код:

Не идеально, но на скорую руку сойдет. Вот и все, собственно. Теперь все товары с нулевой ценой будут в конце списка. Как сделать различие по другоу полю я уже написал.

Attention please. Не успел достаточно это протестировать, возможно эта функция вызывается еще откуда-нибудь. Перед внесением изменений сделайте себе про запас копию оригинальных файлов, которые собираетесь изменить. ;-)

Автор

Сергей Родовниченко

Родился, учился, работал и все такое. Занимаюсь поддержкой сайтов на Shop-Script, Joomla, Wordpress, Prestashop. А также на самописных движках на базе CakePHP.

6 thoughts on “Показ товаров в категории Shop-Script”

  1. Срезал ;)

    core_functionsproduct_functions.php
    ищем строку

    $order_by_clause = «order by sort_order, name»;

    меняем на (1065 строка примерно)

    $order_by_clause = «order by in_stock DESC»;

    работает ) (правда теперь сортировка в админке до …)

  2. Срезал ;)

    core_functions\product_functions.php
    ищем строку

    $order_by_clause = «order by sort_order, name»;

    меняем на (1065 строка примерно)

    $order_by_clause = «order by in_stock DESC»;

    работает ) (правда теперь сортировка в админке до …)

  3. Ага. Сортировка в админке тоже, похоже, работает от этой функции — сначала все с ценой (или с наличием на складе) показываются.

  4. Ага. Сортировка в админке тоже, похоже, работает от этой функции — сначала все с ценой (или с наличием на складе) показываются.

  5. У себя внес эти изменения все работает.
    Автору большое спасибо!!!!!!
    скрипт самый последней версии, что смог протестил вроже все окей.
    Создателям шоп скрипта стоит этот блок читать до «дыр»

  6. У себя внес эти изменения все работает.
    Автору большое спасибо!!!!!!
    скрипт самый последней версии, что смог протестил вроже все окей.
    Создателям шоп скрипта стоит этот блок читать до «дыр»

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *