В opencart 3 стояла задача вывести товары из этой же коллекции, решил вопрос так:
в product.php добавил новый массив данных и его обработку путем копирования полного кода, отвечающего за вывод товаров в карточке $data['products'] = array(); Единственное что изменил - это добавил поле ['mpn'] (manufacturer number), которое используется в админке для указания названия коллекции.
Ну и в twig вывел эти товары, но только те, которые имеют название коллекции, идентичное названию коллекции с текущим просматриваемым товаром. Это было легко.
Но теперь хочу по этому же принципу вывести "похожие товары". Чем не подходит модуль из коробки? Тем, что "рекомендуемые товары" выводятся с заранее вручную установленными товарами. И что для каждого товара в админке добавлять похожие товары при создании нового товара? В моем случае это неудобно, всвязи с большим количеством товаров в магазине.
Вывести эти похожие товары по принципу "коллекций" не вопрос, единственное что я не понял пока, как сделать вывод именно похожих товаров, например я нахожусь в карточке "кресло 1" и тут мне надо чтобы выводились товары типа "кресло 2", "кресло 3" и так далее... Как мне можно научить opencart в контроллере понимать какие товары считать похожими?
- определить признаки "похожести". Например по словам в названии, все товары в названии которых есть слово "кресло" считать похожими. Нужно парсить имена товаров и на основе этого создавать массивы похожих.
Сергей Миллер, смотри, алгоритм может быть какой угодно но если отталкиваться от названия то для начала нужно определить общий паттерн при именовании товаров, например первым словом всегда должен идти тип товара - Кресло розовое, Кресло синее, Кресло раскладное и т.д. Дальше в карточке товара надо получить название, достаем (к примеру) его из $data['name'], дальше через explode() разбиваем строку на слова и берем первый элемент массива который будет содержать слово "Кресло" и дальше используем это слово в SQL запросе для вывода похожих товаров, типа так: SELECT * FROM products WHERE name LIKE 'Кресло%'
Антон Р., принцип понял, но не до конца, получается в catalog/model/product.php нужно написать свою ф-ию где будем получать товары из базы WHERE name LIKE product['name']. Как получается можно передать по какому именно имени искать товары? И смотря на каком товаре ты находишься от именно этого товара и отталкиваемся в поиске похожих, так?
Есть масса модулей, у которых адаптивный подход к "похожести"
Имя, атрибут , цена и прочее...
Но весь минус такой похожести - это нагрузка на базу для получения кортежа похожих товаров