2

バンドルされた製品にショッピング カートの価格ルールを適用しようとしていますが、うまくいきません。私がやりたいことは、SKU 'ABC' のバンドル製品に 10% の割引を適用するクーポン コードを作成することです。

そこで、SKU 属性を「プロモーション ルール条件に使用」->「はい」に設定し、次のようなルールを作成します。

If ALL  of these conditions are TRUE :
If an item is FOUND  in the cart with ANY  of these conditions true: 
SKU is ABC

しかし成功せず…

それで、バンドルされた製品と単純な製品にのみ適用される価格ルールについて何かを読んだので(そうですか?)、バンドルされた製品の製品に適用されるようにルールを変更しました。

If ALL  of these conditions are TRUE :
If an item is FOUND  in the cart with ANY  of these conditions true: 
SKU is one of ABC,ABC-1,ABC-2

運が悪い...

そこで、SKU 全体をそのままにして、新しい属性 give_discount を作成し、これも「プロモーション ルール条件に使用」->「はい」に設定します。はい、私はこの時点で絶望的です。属性を作成し、それをバンドルと子製品に追加します。

If ALL  of these conditions are TRUE :
If an item is FOUND  in the cart with ANY  of these conditions true: 
Give discount  is  Yes 

まだ...いいえ...運...

さて、ここで何が起こっているか知っている人はいますか?私はそれについて頭を包むことができません!このように同梱商品は値引き不可でしょうか?条件を外すと(予想どおり)割引が適用されますが、フィルターを適用するとすぐに、クーポンコードが無効であるという考えが得られます...

編集:

私の価格ルールは、他のタイプの商品にも適用されます。いくつかの調査の後、非表示のカテゴリを作成し、バンドルされた製品をそのカテゴリに配置して、価格ルールをカテゴリに適用することで、コードを機能させることができました。これが上記のようなことを達成できる唯一の方法ですか?

4

2 に答える 2

1

これを試してください:

条件:

If ALL  of these conditions are TRUE :
    If an item is FOUND  in the cart with ALL  of these conditions true: 
        SKU  is  ABC  

    If an item is FOUND  in the cart with ALL  of these conditions true: 
        SKU  is  ABC-1

    If an item is FOUND  in the cart with ALL  of these conditions true: 
        SKU  is  ABC-2  

行動:

Update prices using the following information
    Apply: Fixed Amount discount
    Discount amount : 10%
    Maximum Qty Discount is Applied to: 1
    Discount Qty Step (Buy X): 0
    Apply to Shipping Amount: No
    Free shipping: No
    Stop further rules processing: No

Apply the rule only to cart items matching the following conditions (leave blank for all items)
    If ALL  of these conditions are TRUE :
        SKU  is  ABC  
        SKU  is  ABC-1
        SKU  is  ABC-2 
于 2014-07-22T14:45:23.377 に答える
0

同じ問題があります。これは、1 つの仮想子を持つバンドル製品を持っているときに発生しました。

私はそれを修正しました:

新しいモジュール dir app/code/MyCompany/MyModule/ を作成します。

そして、このディレクトリ内の次のファイル:

etc/module.xml

    <?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="MyCompany_MyModule" setup_version="1.0.0">
        <sequence>
            <module name="Magento_Quote"/>
        </sequence>
    </module>
</config>

etc/di.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">

    <preference for="Magento\Quote\Model\Quote\Item" type="MyCompany\MyModule\Model\Quote\Item"/>

</config>

composer.json

{
  "name": "my-company/my-module",
  "description": "N/A",
  "require": {
    "php": "~7.0.0"
  },
  "type": "magento2-module",
  "version": "1.0.0",
  "license": "proprietary",
  "autoload": {
    "files": [
      "registration.php"
    ],
    "psr-4": {
      "MyCompany\\MyModule\\": ""
    }
  }
}

登録.json

\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'MyCompany_MyModule',
    __DIR__
);

モデル/見積もり/Item.php

<?php
namespace MyCompany\MyModule\Model\Quote;

class Item extends \Magento\Quote\Model\Quote\Item
{

    /**
     * @return \Magento\Quote\Model\Quote\Address
     */
    public function getAddress()
    {
        /** start @override code */
        if ($this->getQuote()->isVirtual()) {
            /** end @override code */
            $address = $this->getQuote()->getBillingAddress();
        } else {
            $address = $this->getQuote()->getShippingAddress();
        }

        return $address;
    }
}
于 2019-05-23T10:48:21.167 に答える