CoreShop Variant Bundle
CoreShop Variant Bundle allows you to manage different Variants of a Product.
Installation
composer require coreshop/variant-bundle
Adding required bundles to kernel
You need to enable the bundle inside the kernel.
<?php
// app/AppKernel.php
public function registerBundlesToCollection(BundleCollection $collection)
{
$collection->addBundles([
new \CoreShop\Bundle\VariantBundle\CoreShopVariantBundle(),
]);
}
Abstract
Pimcore already supports variants. But it doesn't define what a Variant is, or how a variant differs from the Parent Product or other Variants.
In classical e-commerce scenarios, you usually have different Variation Types like Size and Color with different Values like XL or Red.
CoreShop describes these two types of entities as Group (CoreShop\Component\Variant\Model\AttributeGroupInterface) and Value (CoreShop\Component\Variant\Model\AttributeValueInterface
The "Product" itself than is a sort-of abstract entity that is used to define what Attribute Groups are allowed. The Pimcore Variants then, need to have the values of thse Groups filled.
Example:
-
AttributeGroup Color -AttributeValue Red -AttributeValue Blue
-
product (defines allowed groups for color)
- variant-red (defines the AttributeValue Red in attributes)
- variant-blue (defines the AttributeValue Blue in attributes)
Usage
CoreShop Variant Bundle does NOT come with a Installer for certain Resources it requires. That is on purpose and you need to manually install what you need.
Per Default, it comes with 3 different Classes:
-
CoreShopAttributeGroup -
CoreShopAttributeColor -
CoreShopAttributeValue
Whereas Color and Value are two Value types and Group is a Group type.
You can manually import the classes from this dir vendor/coreshop/variant-bundle/Resources/install/pimcore/classes
To create a "Product" Class, you need to implement the interface CoreShop\Component\Variant\Model\ProductVariantAwareInterface. The Class requires you to have these fields:
- attributes - ManyToManyObjectRelation for
CoreShopAttributeColor/CoreShopAttributeValue - allowedAttributeGroups - ManyToManyObjectRelation for
CoreShopAttributeGroup - mainVariant - ManyToOneRelation for
Product(eg. your Class where you implemented the interface)