Я создаю коммерческий сайт и изучаю различные способы показа продуктов с вариантами. Я пытаюсь сделать это для контактных линз и удивляюсь, как лучше.
Продукты могут быть либо простыми, такими как чехол для объектива или решение для линз, у которых нет вариантов, либо в случае контактной линзы каждая линза может иметь до трех конфигурируемых вариантов, в зависимости от объектива, для рецепта ( например, мощность, базовая кривая, диаметр).
В моей структуре у меня есть простые продукты как просто продукт, без родителя. Контактная линза будет сохранена как продукт, и каждый вариант будет сохранен как отдельный продукт, ссылающийся на своего родителя, а сами варианты будут связаны с использованием таблицы products_variants.
У меня есть такая структура:
products
- id
- parent_id
- name
- price
- type_id
- brand_id
type
- id
- name
brand
- id
- name
product_variant_group
- id
- name
product_variant_value
- id
- product_variant_group_id
- value
products_variants (isCrossRef = true for Propel relationships)
- id
- product_id
- product_variant_value_id
Мой код уже довольно медленный, и я даже не начал создавать поля выбора для выбора рецепта.
public function getPossibleVariants($productId)
{
$product = ProductQuery::create()->findPk($productId);
$children = $product->getChildren();
$options = array();
foreach ($children as $child) {
if ($child->countProductsVariantss()) {
$variants = $child->getProductVariantValues();
foreach ($variants as $variant) {
$group = $variant->getProductVariantGroup();
$options[$group->getName()][] = $variant->getValue();
}
}
}
ksort($options);
return $options;
}
Я использую propel и Zend Framework. Я иду об этом правильным путем? Большинству людей понадобятся линзы одного и того же типа, но с разными рецептами для каждого глаза. Как бы я это реализовал?
Я пробовал смотреть на другие системы, такие как magento и oscommerce. Первое смущает меня, и я нахожу код грязным во втором. Поскольку это учебный опыт, я бы хотел сделать все как можно лучше.
Спасибо