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 回答
0

如果您的报价中有可配置的孩子,您可以获得可配置的父母并检查card_only属性。这样你就不需要关心简单的孩子了。

像这样的东西:

$quoteItemsCollection = Mage::getSingleton('checkout/cart')->getQuote()->getItemsCollection();
foreach ($quoteItemsCollection as $quoteItem) {
    $productType = $quoteItem->getProductType();
    // if productType is config and getCardOnly(), then $cardonly = true;
于 2015-12-20T20:22:14.480 回答