gewebe/sylius-product-deposit-plugin

一个Sylius插件,允许产品具有押金价格


README

Latest Version on Packagist Software License Build Quality Score

在Sylius中,产品押金插件允许您为任何产品设置可退还的押金价格。例如:瓶子的押金、罐子的押金、托盘的押金、电池或汽车替换零件的押金。

功能

  • 为每个产品变体和渠道存储单独的押金价格
  • 押金价格在产品详情页上显示
  • 在购物车/结账/订单时,显示包括押金在内的总单位价格。

安装

通过composer下载插件

composer require gewebe/sylius-product-deposit-plugin

启用插件

通过将其添加到您的 config/bundles.php 文件来注册插件

<?php

return [
    // ...
    Gewebe\SyliusProductDepositPlugin\GewebeSyliusProductDepositPlugin::class => ['all' => true],
];

配置插件

# config/packages/gewebe_sylius_product_deposit.yaml

imports:
    - { resource: '@GewebeSyliusProductDepositPlugin/Resources/config/app/config.yml'}

从插件目录复制模板覆盖

From: [shop_dir]/vendor/gewebe/sylius-product-deposit-plugin/test/Application/templates
To: [shop_dir]/templates

扩展 ProductVariant 实体

  • 如果您使用 annotations 映射
# src/Entity/Product/ProductVariant.php

namespace App\Entity\Product;

use Doctrine\ORM\Mapping as ORM;
use Gewebe\SyliusProductDepositPlugin\Entity\ProductVariantInterface as ProductVariantDepositInterface;
use Gewebe\SyliusProductDepositPlugin\Entity\ProductVariantDepositTrait;
use Sylius\Component\Core\Model\ProductVariant as BaseProductVariant;

/**
 * @ORM\Entity
 * @ORM\Table(name="sylius_product_variant")
 */
class ProductVariant extends BaseProductVariant implements ProductVariantDepositInterface
{
    use ProductVariantDepositTrait;

    public function __construct()
    {
        parent::__construct();

        $this->initProductVariantDepositTrait();
    }

    // ...
}
  • 如果您使用 yaml 映射,也要添加
App\Entity\Product\ProductVariant:
    type: entity
    table: sylius_product_variant
    manyToOne:
        depositTaxCategory:
            targetEntity: Sylius\Component\Taxation\Model\TaxCategoryInterface
            joinColumn:
                name: deposit_tax_category_id
                referencedColumnName: id
                onDelete: SET NULL
    oneToMany:
        channelDeposits:
            targetEntity: Gewebe\SyliusProductDepositPlugin\Entity\ChannelDepositInterface
            mappedBy: productVariant
            orphanRemoval: true
            indexBy: channelCode
            cascade:
                - all

更新您的数据库模式

bin/console doctrine:migrations:diff
bin/console doctrine:migrations:migrate

用法

1. 为产品变体添加押金价格

Screenshot manage product variant deposit price

2. 浏览带有押金价格的产品变体

Screenshot product details with deposit

3. 购买包含在最终产品价格中的押金价格的产品

Screenshot shopping cart with deposit

测试

设置

$ composer install
$ cd tests/Application
$ yarn install
$ yarn run gulp
$ bin/console assets:install public -e test
$ bin/console doctrine:schema:create -e test

$ export APP_ENV=test
$ symfony server:start --port=8080 --dir=public

运行测试

$ vendor/bin/behat
$ vendor/bin/phpspec run
$ vendor/bin/phpstan analyse -c phpstan.neon -l max src/
$ vendor/bin/psalm