solutiondrive / sylius-product-bundles-plugin
Plugin for Sylius to configure bundles for products that can be sold together
Installs: 1 859
Dependents: 0
Suggesters: 0
Security: 0
Stars: 20
Watchers: 11
Forks: 4
Open Issues: 5
Type:sylius-plugin
Requires
- php: ^7.1
- sylius/sylius: ^1.0.4
Requires (Dev)
- behat/behat: ^3.3
- behat/mink: ^1.7
- behat/mink-browserkit-driver: ^1.3
- behat/mink-extension: ^2.2
- behat/mink-selenium2-driver: ^1.3
- friends-of-behat/context-service-extension: ^1.0
- friends-of-behat/cross-container-extension: ^1.0
- friends-of-behat/service-container-extension: ^1.0
- friends-of-behat/symfony-extension: ^1.0
- friends-of-behat/variadic-extension: ^1.0
- lakion/mink-debug-extension: ^1.2.3
- phpspec/phpspec: ^3.2
- phpstan/phpstan-shim: ^0.9.2
- phpunit/phpunit: ^5.6
- se/selenium-server-standalone: ^2.52
- solutiondrive/coding-standard: ^1.0
- symplify/easy-coding-standard: ^2.4
Conflicts
- sylius/sylius: 1.1.3 || 1.1.4
- symfony/symfony: ^3.4.7
This package is auto-updated.
Last update: 2024-10-06 09:53:26 UTC
README
Sylius Product Bundles Plugin
Installation
-
Run
composer create-project sylius/plugin-skeleton ProjectName
. -
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
-
PHPUnit
$ bin/phpunit
-
PHPSpec
$ bin/phpspec run
-
Behat (non-JS scenarios)
$ bin/behat --tags="~@javascript"
-
Behat (JS scenarios)
-
Download Chromedriver
-
Run Selenium server with previously downloaded Chromedriver:
$ bin/selenium-server-standalone -Dwebdriver.chrome.driver=chromedriver
-
Run test application's webserver on
localhost:8080
:$ (cd tests/Application && bin/console server:run 127.0.0.1:8080 -d web -e test)
-
Run Behat:
$ bin/behat --tags="@javascript"
-
Opening Sylius with your plugin
-
Using
test
environment:$ (cd tests/Application && bin/console sylius:fixtures:load -e test) $ (cd tests/Application && bin/console server:run -d web -e test)
-
Using
dev
environment:$ (cd tests/Application && bin/console sylius:fixtures:load -e dev) $ (cd tests/Application && bin/console server:run -d web -e dev)