solutionDrive / SyliusProductBundlesPlugin

Plugin for Sylius to configure bundles for products that can be sold together
MIT License
20 stars 4 forks source link

Sylius Product Bundles Plugin

License Packagist Build Status Scrutinizer Code Quality

Installation

  1. Run composer create-project sylius/plugin-skeleton ProjectName.

  2. From the plugin skeleton root directory, run the following commands:

    $ (cd tests/Application && yarn install)
    $ (cd tests/Application && yarn run gulp)
    $ (cd tests/Application && bin/console assets:install web -e test)
    
    $ (cd tests/Application && bin/console doctrine:database:create -e test)
    $ (cd tests/Application && bin/console doctrine:schema:create -e test)

Definition

ProductBundle

ProductBundles are a independent resource and have a OneToOne-relationship with a Product that represents the bundle throughout the sylius-framework, e.g. for calculating prices and taxes in the checkout. The content of a ProductBundle is organized in ProductBundleSlots. One ProductBundle can have 1 to n ProductBundleSlots.

ProductBundleSlots

ProductBundleSlots represent a group of products that can be switched through by the customer. E.g. in a Bundle for football-Teams there could be a Slot 'Shirts', in which different kinds of shirts can be referenced. Only one item of each ProductBundleSlot is part of the finally bought bundle.

Usage

ProductBundleCreator

This is a service to create ProductBundles programmatically. It will only create Objects necessary for the ProductBundle. It won't create products for you. But if you have the products that should be part of the bundle you want to create, they can be associated with the created bundle and the slots inside the bundle.

get the service

$bundleCreator = $container->get('solutiondrive.product_bundles.product_bundle_creator');

create your bundle


$slotOptionsFactory = new solutionDrive\SyliusProductBundlesPlugin\Factory\ProductBundleSlotOptionsFactory();

$hatSlotOptions = $slotOptionsFactory->createNewWithValues(1, 'TopHats');

$shirtSlotOptions = $slotOptionsFactory->createNewWithValues(2, 'Shirts', ['someAdditionalOption' => 'AndItsValue']);

$bundleCreator->createProductBundle('YourAwesomeBundle', $prductRepresentationOfTheBundle);
$bundleCreator->addSlot('YourAwsomeHats', $hatSlotOptions, $hatsToAssignToSlot);
$bundleCreator->addSlot('YourAwsomeShirts', $shirtSlotOptions, $shirtsToAssignToSlot);

$productBundle = $bundleCreator->getProductBundle();

Fixtures

Sometimes you'll need to set up your environment quickly and add some default bundles. You can take a look at tests/Application/app/config/fixtures.yml file to see how you can configure fixtures.

Running plugin tests

Opening Sylius with your plugin