sylfrid/sylius-catalog-promotion-plugin
Composer 安装命令:
composer require sylfrid/sylius-catalog-promotion-plugin
包简介
Catalog promotion plugin for Sylius
README 文档
README
Plugin for Sylius to define permanent or time-limited promotions for products and automatically update prices.
Install
Add plugin to composer.json
composer require setono/sylius-catalog-promotion-plugin
Register plugin
<?php # config/bundles.php return [ // ... Setono\JobStatusBundle\SetonoJobStatusBundle::class => ['all' => true], Setono\SyliusCatalogPromotionPlugin\SetonoSyliusCatalogPromotionPlugin::class => ['all' => true], Sylius\Bundle\GridBundle\SyliusGridBundle::class => ['all' => true], // ... ];
Note, that we MUST define SetonoSyliusCatalogPromotionPlugin BEFORE SyliusGridBundle.
Otherwise you'll see exception like this:
You have requested a non-existent parameter "setono_sylius_catalog_promotion.model.promotion.class".
Add config
# config/packages/setono_sylius_catalog_promotion.yaml imports: - { resource: "@SetonoSyliusCatalogPromotionPlugin/Resources/config/app/config.yaml" } # Uncomment if you want to add some catalog promotion fixtures to default suite # - { resource: "@SetonoSyliusCatalogPromotionPlugin/Resources/config/app/fixtures.yaml" }
Add routing
# config/routes/setono_sylius_catalog_promotion.yaml setono_sylius_catalog_promotion_admin: resource: "@SetonoSyliusCatalogPromotionPlugin/Resources/config/admin_routing.yaml" prefix: /admin
Extend core classes
Extend ChannelPricing
<?php declare(strict_types=1); namespace App\Entity\Channel; use Doctrine\ORM\Mapping as ORM; use Setono\SyliusCatalogPromotionPlugin\Model\ChannelPricingInterface as CatalogPromotionChannelPricingInterface; use Setono\SyliusCatalogPromotionPlugin\Model\ChannelPricingTrait as CatalogPromotionChannelPricingTrait; use Sylius\Component\Core\Model\ChannelPricing as BaseChannelPricing; /** * @ORM\Table(name="sylius_channel_pricing") * @ORM\Entity() */ class ChannelPricing extends BaseChannelPricing implements CatalogPromotionChannelPricingInterface { use CatalogPromotionChannelPricingTrait; }
Extend ChannelPricingRepository
<?php declare(strict_types=1); namespace App\Repository; use Setono\SyliusCatalogPromotionPlugin\Doctrine\ORM\ChannelPricingRepositoryTrait as CatalogPromotionChannelPricingRepositoryTrait; use Setono\SyliusCatalogPromotionPlugin\Repository\ChannelPricingRepositoryInterface as CatalogPromotionChannelPricingRepositoryInterface; use Sylius\Bundle\ResourceBundle\Doctrine\ORM\EntityRepository; class ChannelPricingRepository extends EntityRepository implements CatalogPromotionChannelPricingRepositoryInterface { use CatalogPromotionChannelPricingRepositoryTrait; }
Extend ProductRepository
<?php declare(strict_types=1); namespace App\Repository; use Setono\SyliusCatalogPromotionPlugin\Doctrine\ORM\ProductRepositoryTrait as CatalogPromotionProductRepositoryTrait; use Setono\SyliusCatalogPromotionPlugin\Repository\ProductRepositoryInterface as CatalogPromotionProductRepositoryInterface; use Sylius\Bundle\CoreBundle\Doctrine\ORM\ProductRepository as BaseProductRepository; class ProductRepository extends BaseProductRepository implements CatalogPromotionProductRepositoryInterface { use CatalogPromotionProductRepositoryTrait; }
Extend ProductVariantRepository
<?php declare(strict_types=1); namespace App\Repository; use Setono\SyliusCatalogPromotionPlugin\Doctrine\ORM\ProductVariantRepositoryTrait as CatalogPromotionProductVariantRepositoryTrait; use Setono\SyliusCatalogPromotionPlugin\Repository\ProductVariantRepositoryInterface as CatalogPromotionProductVariantRepositoryInterface; use Sylius\Bundle\CoreBundle\Doctrine\ORM\ProductVariantRepository as BaseProductVariantRepository; class ProductVariantRepository extends BaseProductVariantRepository implements CatalogPromotionProductVariantRepositoryInterface { use CatalogPromotionProductVariantRepositoryTrait; }
Update config with extended classes
In your config/packages/_sylius.yaml file update the configured classes:
# config/packages/_sylius.yaml sylius_core: resources: channel_pricing: classes: model: App\Entity\ChannelPricing repository: App\Repository\ChannelPricingRepository sylius_product: resources: product: classes: repository: App\Repository\ProductRepository product_variant: classes: repository: App\Repository\ProductVariantRepository
Update your schema
Create a migration file:
$ php bin/console doctrine:migrations:diff
If you have existing discounted products you should append this line to the up method in the migration file:
<?php namespace DoctrineMigrations; use Doctrine\DBAL\Schema\Schema; use Doctrine\Migrations\AbstractMigration; final class Version20191028134956 extends AbstractMigration { public function up(Schema $schema) : void { // The generated SQL will be here // ... // append this line $this->addSql('UPDATE sylius_channel_pricing SET manually_discounted = 1 WHERE original_price IS NOT NULL AND price != original_price'); } public function down(Schema $schema) : void { // ... } }
Execute migration file:
$ php bin/console doctrine:migrations:migrate
Install assets
bin/console sylius:install:assets
Configure CRON to run next command every minute
$ php bin/console setono:sylius-catalog-promotion:process
统计信息
- 总下载量: 158
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2021-09-12
