positibe/sylius-composite-price-calculator-bundle 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

positibe/sylius-composite-price-calculator-bundle

Composer 安装命令:

composer require positibe/sylius-composite-price-calculator-bundle

包简介

Composite Price Calculator Bundle for Sylius Project.

README 文档

README

This bundle allows you to use multiples price calculators on chain by replacing the default calculator for a composite calculator.

Installation

  1. Require plugin with composer:

    composer require positibe/sylius-composite-price-calculator-bundle
  2. Add plugin class to your AppKernel:

With Symfony Flex:

```php
# config/bundles.php
return [
    //...
    Positibe\Sylius\CompositePriceCalculatorBundle\SyliusCompositePriceCalculatorBundle::class => ['all' => true]
];
```

Without Symfony Flex:

```php
$bundles = [
   new \FOS\JsRoutingBundle\FOSJsRoutingBundle(),
   new \Sylius\AdminOrderCreationPlugin\SyliusAdminOrderCreationPlugin(),
];
```

How to use

Nota: The main advantage of this bundle is to provide a way to implement product variant price calculator on Sylius plugins without having conflict between them. We recommend do not use it if you don't really need it.

This bundle add a new entry to our $context passed on the calculate(ProductVariantInterface $productVariant, array $context): int method. Now we have a price where we have the last price before calling the current calculator.

The job of calculator now is add or modify the price given depend of the custom logic.

Here is a example of a fee calculator plugin:

```php

namespace Positibe\Sylius\FeePlugin\Calculator;

use Positibe\Sylius\FeePlugin\Entity\FeeableInterface;
use Sylius\Component\Core\Calculator\ProductVariantPriceCalculatorInterface;
use Sylius\Component\Core\Model\ProductVariantInterface;

class ProductVariantFeeablePriceCalculator implements ProductVariantPriceCalculatorInterface
{
    //... Some stuf to get services

    /**
     * @param ProductVariantInterface|FeeableInterface $productVariant
     * @param array $context
     * @return int
     */
    public function calculate(ProductVariantInterface $productVariant, array $context): int
    {
        $price = (int) $context['price'] ?? 0;
        $fees = $productVariant->getFees();
        foreach ($fees as $fee) {
            if ($fee->isIncludedInPrice()) {
                $price += $this->feeCalculator->calculate($context['price'], $fee);
            }
        }

        return (int) $price;
    }
}
```

Default calculator

The Positibe\Sylius\CompositePriceCalculatorBundle\Calculator\CompositePriceCalculator overrides the default calculator sylius.calculator.product_variant_price and the alias Sylius\Component\Core\Calculator\ProductVariantPriceCalculatorInterface.

The default one now has the id Sylius\Component\Core\Calculator\ProductVariantPriceCalculator and has priority: 40, the higher priority the sooner is executed.

This bundle autoconfigure your services that implement Sylius\Component\Core\Calculator\ProductVariantPriceCalculatorInterface interface and inject the service on the chain.

Order matters

You can change the order of the chain calculator by providing a priority.

Causion: By default the priority is cero (`0`) so the order without priority is unpredictable.

Here yaml Positibe\Sylius\FeePlugin\Calculator\ProductVariantFeeablePriceCalculator: autoconfigure: false tags: - { name: 'sylius.price_calculator', priority: 10 }

统计信息

  • 总下载量: 28
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 2
  • 点击次数: 3
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 2
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2019-03-19

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固