Урок 33 Как выборочно не отображать товары в категории, поиске

Очередная доработка для магазина на Опенкарт. В общем имеется магазин, в котором продаются фасады. Причем они имеют покрытие пленкой стандарт и бизнес. Каждый вариант реализован как отдельный товар, из за чего в каталоге возникает путаница. Т.е. отображается, к примеру, Венеция с пленкой Стандарт и Венеция с пленкой Бизнес. Задача: убрать отображение товаров с пленкой бизнес.
Тут есть несколько вариантов решения: делать костыль и фильтровать по вхождению с пленкой Бизнес непосредственно в темплейте, но тогда получается ерунда с отображением товаров и пагинацией. Можно то же самое провернуть в контроллере — но это тоже так себе решения, к тому же выходит слишком много телодвижений. Оба варианта не универсальны, так как если в будущем надо будет убрать товары, например, с пленкой Люкс, то придется эти все костыли править.
Универсальным решением стала доработка модели товара и использование любого из стандартных полей опенкарта ean, upc и т.д. в качестве включателя/выключателя. Т.е. было добавлено условия, что если товар имеет заполненное поле upc то он не будет выводиться.
Итак, заходим в модель товара по адресу
1 |
/catalog/model/catalog/product.php |
Находим
1 |
AND p.status = '1' |
и меняем на
1 |
AND p.status = '1' AND p.upc = '' |
Всего надо сделать 4 замены. ВАЖНО!!! В
1 |
public function getProduct($product_id) { |
никаких замен делать не надо. Т.е. в этой функции ничего не добавляем.
Не забывайте обновлять кеш модификаторов. Теперь если Вам необходимо скрыть какой либо товар из категории, достаточно во вкладке Данные этого товара в поле upc поставить любой символ или пробел. Товар не будет отображаться в категории, но останется доступным по прямой ссылке.
Отличная статья! Очень полезная доработка!
Спасибо!
Спасибо, за статью. А как сделать чтобы для поиска эти товары не скрывались на сайте? Мне нужно чтобы в категории было скрыто, но можно было найти товар при этом и зайти на его карточку. Подскажите, пожалуйста.
Здравствуйте. Сейчас времени нет написать готовое решение. Смысл в следующем. Вам необходимо в /catalog/model/catalog/product.php создать новую функцию выборки товаров именно для контроллера поиска.
По сути продублировать public function getProducts($data = array()) { … } но с другим названием и в нее не вносить изменения описанные в статье. Далее уже это функцию использовать в контроллере $results = $this->model_catalog_product->ТУТ_НОВАЯ_ФУНКЦИЯ($filter_data);