#php #mysql #activerecord #yii #e-commerce
#php #mysql #activerecord #yii #электронная коммерция
Вопрос:
Я создаю сайт электронной коммерции, и мои товары сгруппированы по категориям (как и в любой другой системе электронной коммерции).
Проблема заключается в следующем: разные категории (и продукты в них) должны иметь разные атрибуты (например, smart tv телевизора или нет).
Итак, кто-нибудь мог бы помочь мне с некоторой «теорией» фильтрации продуктов (db design), какой передовой практике следует следовать?
И как я могу автоматически «создавать» эти страницы категорий продуктов (для автоматического создания фильтров, например: в категории TV переключатель для smart tv или нет, а в категории телефонов смартфон или нет).
Спасибо за помощь!
Ответ №1:
Большинство систем электронной коммерции используют дерево категорий с бесконечными уровнями.
Затем при редактировании вашего продукта вы показываете это дерево с флажками и нажимаете на флажки категорий, к которым вы хотите отнести этот продукт.
Для этого вам понадобятся таблицы: product, category и category_has_product. Поэтому, когда вы устанавливаете флажки, все эти категории должны быть вставлены в category_has_product для этого продукта.
Затем при поиске вы объединяете product с category_has_product , довольно просто.
В противном случае, если вы хотите, чтобы пользователи могли выбирать только одну категорию из конца дерева, но вы хотите иметь возможность фильтровать товары внутри родительской категории и включать их в дочерние категории, вы могли бы взглянуть на такие вещи, как это, это сложнее понять, но, возможно, вы найдите несколько других примеров того, как это реализовать:
http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/
Суть вложенных категорий в том, что вы можете в конечном итоге сохранить только конечный category_id в таблице product, но даже в этом случае вы сможете совершить некоторое волшебство, чтобы включить этот продукт в результаты поиска всех родительских категорий.
Итак, вышесказанное будет касаться «как распределять продукты по категориям».
Что касается ссылок: ну, вы могли бы просто зациклиться внутри дерева категорий и распечатать ссылки там, где хотите и как хотите.
Что касается дополнительных фильтров, таких как тип телевизора (Smart или нет), вы можете либо просто включить оба в дерево категорий и забыть о добавлении дополнительных полей в форму продукта, либо у вас может быть более сложное решение, использующее что-то вроде атрибутов:
У вас были бы атрибуты таблицы (id, name) и атрибуты таблицы_значение (id, attribute_id, value), затем в форме продукта вместо статических флажков для «Этот телевизор умный», вы бы переходили в таблицу атрибутов, и у вас был бы атрибут с именем «Smart Tv», а значениябыло бы «Да, нет, может быть, и т.д.», Так что вы используете это для рисования динамических выпадающих списков.
Теперь, если вам также нужны ссылки для атрибутов, вы просто создаете ссылку на категорию и на определенный атрибут с определенным значением. Пример /category.php?id=2amp;attribute=1amp;attribute_value=5
Кроме того, если вы хотите иметь несколько URL-адресов, удобных для seo, просто добавьте поле «slug» как в таблицу category, так и в таблицу attribute_values, а затем перепишите URL-адреса.
Вы также можете заглянуть в Prestashop, он использует или использовал некоторые из обсуждаемых здесь вещей, даже если сейчас он стал очень сложным и довольно болезненным, но может предоставить некоторую полезную информацию.
Комментарии:
1. Разве использование базы данных NoSQL не является лучшим способом работы с подобными иерархическими данными?