Opencart. Удаление пустых (незаполненных) товаров из поиска по товару — столкнулся на практике с такой проблемой, в БД появлялись пустые карточки товара (номенклатуры) без наименования. Периодически сбоит синхронизация БД с CRM-системой, к которой у меня нет доступа. И, так как я не могу почистить БД или исправить саму синхронизацию, нужно было что-то придумывать.

Решение проблемы:
В контроллере /catalog/controller/product/search.php ищем следующие строки:
foreach ($results as $result) {
После данного кода вставляем всего 1 строку, решение очень простое, фильтруем товар по заполненности id товара:
if(!isset($result['product_id'])) continue;
Вот и все, проблема решена!
Бывает, что проблема возникает в других местах сайта (каталоге или сопутствующих товарах) — в таких ситуациях смотрите контроллер данной части сайта (где возникает такая же ошибка) и подобным образом добавляем проверку на id.
Таким же образом, можно убрать товары без изображений или товары с пустыми именами — вместо product_id, вставляйте любое нужное Вам значение из массива $data[‘products’] — thumb или name — и т.д.
Бывает, что причина появления данных карточек возникает по вине сторонних модификаций, например, Brainy Filter — в таком случае, данное решение не поможет и нужно будет смотреть файлы самого плагина. Похожая ситуация, когда «Умный Фильтр» мешал отображению товаров в каталоге и решение возникшей проблемы описаны в данной статье.
Протестировано на OcStore 2.3
Дата создания статьи: 14.08.2022
Рубрика: Веб-разработка