EC-CUBEめも

送料を計算するProcessorを以下の場所に作成します。
app/Customize/Service/PurchaseFlow/Processor/DeliveryFeeProcessor.php

送料を100円に設定するには以下のような記述になります。
ShoppingFlowアノテーションを書いておかないといけないのがポイントです。

アノテーションは @ShoppingFlow, @CartFlow, @OrderFlow が指定できます。
インターフェイスには ItemHolderPreprocessor, ItemValidator, ItemHolderValidator などが指定できます。

ドキュメントには以下の記述がありますが、不要です。

独自に作成した Processor を有効にするには、 app/config/eccube/packages/purchaseflow.yaml の定義を修正します。

https://doc4.ec-cube.net/customize_service

<?php

namespace Customize\Service\PurchaseFlow\Processor;

use Eccube\Annotation\ShoppingFlow;
use Eccube\Entity\ItemHolderInterface;
use Eccube\Service\PurchaseFlow\ItemHolderPreprocessor;
use Eccube\Service\PurchaseFlow\PurchaseContext;

/**
 * @ShoppingFlow
 */
class DeliveryFeeProcessor implements ItemHolderPreprocessor
{
    /**
     * @param ItemHolderInterface $itemHolder
     * @param PurchaseContext $context
     */
    public function process(ItemHolderInterface $itemHolder, PurchaseContext $context)
    {
        $this->updateDeliveryFeeItem($itemHolder);
    }

    /**
     * @param ItemHolderInterface $itemHolder
     */
    private function updateDeliveryFeeItem(ItemHolderInterface $itemHolder)
    {
        /** @var Order $Order */
        $Order = $itemHolder;
        /* @var Shipping $Shipping */
        foreach ($Order->getShippings() as $Shipping) {
            /** @var OrderItem $item */
            foreach ($Shipping->getOrderItems() as $item) {
                if ($item->isDeliveryFee()) {
                    $item->setPrice(100);
                    $item->setQuantity(1);
                }
            }
        }
    }
}

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-09-19 (日) 19:09:21