brille24/sylius-special-price-plugin

为Sylius提供基于时间的特殊定价。


README

Build Status

此插件提供了一种配置,用于仅在特定日期范围内有效的价格。因此,如果您想在5月1日到4月1日之间更改产品的价格,这个插件就适合您。

安装

  1. 需要插件

    composer require brille24/sylius-special-price-plugin
  2. 在您的 bundles.php 中注册插件

    return [
        ...
        Brille24\SyliusSpecialPricePlugin\Brille24SyliusSpecialPricePlugin::class => ['all' => true],
    ];
  3. 导入插件配置

    imports:
        ...
        - { resource: "@Brille24SyliusSpecialPricePlugin/Resources/config/config.yml" }
  4. 添加迁移

    1. 将迁移从 tests/Application/migration 复制到您的迁移位置。
  5. 重写产品变体实体

    1. 编写新类,该类将使用 ProductVariantSpecialPricableTrait 并实现 ProductVariantSpecialPricableInterface
    2. 在配置中重写模型类
      sylius_product:
          resources:
              product_variant:
                  classes:
                      model: Brille24\SyliusSpecialPricePlugin\Entity\ProductVariant
  6. 添加映射和验证

    1. 映射
      <!-- ProductVariant.orm.xml -->
      
      <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping">
          <mapped-superclass name="Your\Name\Space\ProductVariant" table="sylius_product_variant">
              <one-to-many field="channelSpecialPricings"
                           target-entity="Brille24\SyliusSpecialPricePlugin\Entity\ChannelSpecialPricingInterface"
                           mapped-by="productVariant" orphan-removal="true">
                  <cascade>
                      <cascade-all/>
                  </cascade>
              </one-to-many>
          </mapped-superclass>
      </doctrine-mapping>
    2. 验证
      <!-- ProductVariant.xml -->
      
      <constraint-mapping xmlns="https://symfony.com.cn/schema/dic/constraint-mapping">
          <class name="Your\Name\Space\ProductVariant">
              <constraint
                      name="Brille24\SyliusSpecialPricePlugin\Validator\ProductVariantChannelSpecialPriceDateOverlapConstraint">
                  <option name="groups">sylius</option>
              </constraint>
          </class>
      </constraint-mapping>
  7. 重写 SyliusAdminBundle/ProductVariant/Tab/_details.html.twig

    添加以下内容

    <div class="ui segment">
        {% include 'Brille24SyliusSpecialPricePlugin::_specialPrice.html.twig' with {
            'form': form.channelSpecialPricings
        } %}
    </div>
  8. 更新数据库模式

    bin/console doctrine:schema:update --force

运行测试服务器

从插件根目录,运行以下命令

(cd tests/Application && yarn install)
(cd tests/Application && yarn build)
(cd tests/Application && bin/console assets:install --symlink)

(cd tests/Application && bin/console doctrine:database:create)
(cd tests/Application && bin/console doctrine:schema:update --force)
(cd tests/Application && bin/console sylius:fixtures:load)

(cd tests/Application && bin/console server:start)

测试

为了运行 phpspec 测试,您需要运行命令 vendor/bin/phpspec run。为了运行 phpunit 测试,您需要运行命令 vendor/bin/phpunit。为了运行 behat 测试,您需要运行命令 vendor/bin/behat