Как автоматически привязывать товары к категориям?

Интересна грамотная реализация привязки товара к категориям. Например по свойству товара год привязать его к категории 2016. Учесть что могут появиться новые категории. Например в категории 2016 под категория женские. Соответственно туда попадают товары с комбинацией свойст свойствами год = 2016 и пол = ж.

Видел в битриксе реализацию. Там у каждой категории было поле фильтр - php код который выполнялся eval. По крону запускался скрипт просматривал все категории и все товары и при совпадении фильтра делал привязку.
Думаю это не самое верное решение, может кто знает получше?
  • Вопрос задан
  • 864 просмотра
Решения вопроса 1
Верное решение, с теоретической точки зрения - это дедуктивная база данных. У вас есть основная база данных с фактами о товарах (т.е. с их атрибутами), и вы на основе заданных правил строите новые производные утверждения о вхождении того или иного товара в категорию.

Ваши категории - это по сути множества/классы, заданные при помощи предиката. Каждый ваш фильтр - это предикат вхождения товара во множество. Иерархия категорий - это обычное наследование классов. Для реализации наследования вам нужно про проверке предиката для категории-наследника проверять еще и все предикаты в родительских категориях. Тогда в категории "2016" вы запишите условие "год = 2016", а в дочерней категории женские напишите "пол = ж", и оба условия следует проверять для каждого товара.

Таким образом, вам нужен какой-то простой язык или способ записи предикатов (возможно, вам захочется логических операторов и/или/не), иерархия категорий, где к каждой категории привязан предикат на вышеуказанном языке, и движок, который будет выполнять привязку товаров к категориям, или даже, если товаров немного, запрашивать их на ходу, транслируя предикаты в SQL-фильтры (ну или другой язык запросов для базы, в которой у вас товары). У нас был проект - агрегатор товаров из интернет-магазинов, мы примерно так категории и делали. Даже успели впилить поддержку некоторых встроенных функций в предикатах, чтобы например можно было по части названия товара определять его в ту или иную категорию (или наоборот, исключать из категории, чтобы сантехнические прокладки отличать от всяких других).
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Скорее у Вас не категория, а свойство 2016, такие свойства вписываются через таблицу связей в таблицу свойств, соответственно читаем связь типа многие ко многим.
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Ваша категория - это название фасетного фильтра.
Всё.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы