2

この magento (1.9.1) ストアで、特定の製品 (構成可能な製品) にカードのみの支払いオプションを実装しようとしています。私が使用しているコードで私が抱えている問題は、各単純な製品に移動して、属性値を更新して有効にする必要があることです。コードを変更して、単純な製品の値を使用する代わりに、単純な製品が使用している値に関係なく、親製品の値を使用できるかどうかを知りたい. したがって、構成可能な製品を更新して、この製品がカードのみかどうかを判断する必要があります。

このモジュールの私の Observer.php

<?php

class JMAWD_CardOnly_Model_Observer
{
public function cardOnly(Varien_Event_Observer $observer)
{
   $event           = $observer->getEvent();
       $method          = $event->getMethodInstance();
       $result          = $event->getResult();
   $cardonly        = false;

    foreach (Mage::getSingleton('checkout/cart')->getQuote()->getAllVisibleItems() as $item)
    {
        if($item->getProduct()->getCardOnly()){
            $cardonly = true;
        }
    }

    if($method->getCode() == "cashondelivery" && $cardonly){
        $result->isAvailable = false;
    }

}
}

このモジュールの私の config.xml

<?xml version="1.0"?>
<config>
<modules>
    <JMAWD_CardOnly>
        <version>0.1.0</version>
    </JMAWD_CardOnly>
</modules>
<global>
    <events>
        <payment_method_is_active>
            <observers>
                <card_only>
                    <type>singleton</type>
                    <class>cardonly/observer</class>
                    <method>cardOnly</method>
                </card_only>
            </observers>
        </payment_method_is_active>
    </events> 
    <models>
        <cardonly>
            <class>JMAWD_CardOnly_Model</class>
            <resourceModel>cardonly_mysql4</resourceModel>
        </cardonly>
    </models>
    <sales>
        <quote>
            <item>
                <product_attributes>
                    <card_only/>
                </product_attributes>
            </item>
        </quote>
    </sales>
</global>
</config>

ヘルプとアドバイスをいただければ幸いです。ありがとう

4

2 に答える 2

0

これは では発生しませんgetAllVisibleItems()この回答で説明されているように:

アイテム コレクションをロードし、削除済みとしてマークされておらず、親を持たないすべてのアイテムの配列を返します (つまり、バンドルされた構成可能な製品のアイテムを取得しますが、関連する子は取得しません)。各配列アイテムは、カート ページに表示される行に対応します。

Simple Configurable Products や Better Configurable Products のような拡張機能を使用していると思われます。これらは、単純な製品の属性 (特に価格) が表示および使用されるように構成可能な製品タイプを変更し、カート内の製品は実際にはのない単純な製品。

この場合、拡張機能のコードを調べて、構成可能な製品に関する情報がどこにどのように格納されているかを調べる必要があります。sales_flat_quote_item_option通常、見積もり項目に関するすべての追加情報が保存されているため、テーブルを確認することもできます。

于 2015-12-20T20:53:26.843 に答える