从目录价格规则中排除可配置产品的关联产品


8

我试图从目录价格规则中排除可配置产品的关联简单产品。这样做的原因是我已经在超属性配置部分中添加了-price,并且我不想再对此特定产品给予任何折扣。

我试图排除要保存在catalogrule_product表中的产品,但发现该表未保存关联产品,而是保存了可配置的产品ID,并使用它来计算价格。

我也试图在configurable.php中解决一些问题,但是还没有运气。

我不想使用任何肮脏的方式来做到这一点。请告诉我这样做的聪明方法是什么。


1
在“目录规则”>“操作”中将选项:“启用子产品折扣”设置为“否”是否有帮助?
Rakesh Shewale,2014年

没有它不起作用。
Jitendra 2014年

Answers:


2

Magento默认情况下不支持此功能。相反,我们覆盖了Mage_SalesRule_Model_Validator并创建了销售规则重写。在那我们检查关联的产品是否匹配销售规则。

应用程序/代码/本地/AAA/SalesRule/etc/config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <AAA_SalesRule>
            <version>0.1.0</version>
        </AAA_SalesRule>
    </modules>
    <global>
        <models>
            <aaa_salesrule>
                <class>AAA_SalesRule_Model</class>
            </aaa_salesrule>
            <salesrule>
                <rewrite>
                    <validator>AAA_SalesRule_Model_SalesRule_Validator</validator>
                </rewrite>
            </salesrule>
        </models>
    </global>
</config>

应用/代码/本地/ AAA / SalesRule /模型/SalesRule/Validator.php

private function _hasChildInCart($product) {
        $quote = Mage::getSingleton('checkout/session')->getQuote();
        $childProducts = Mage::getModel('catalog/product_type_configurable')->getUsedProducts(null, $product);
        $childrenIds = $this->_getChildrenIds($childProducts);

        foreach ($quote->getAllItems() as $item) {
            if (in_array($item->getProductId(), $childrenIds)) {
                $registeredItem = Mage::registry('rule_config_product_' . $product->getId());
                if ($registeredItem != null && $registeredItem->getId() != $item->getId()) {
                    Mage::unregister('rule_config_product_' . $product->getId());
                }
                if ($registeredItem == null) {
                    Mage::register('rule_config_product_' . $product->getId(), $item);
                }
                return true;
            }
        }
        return false;
    }

    private function _getChildrenIds($childProducts) {
        $childrenIds = array();
        foreach ($childProducts as $child) {
            $childrenIds[] = $child->getId();
        }

        return $childrenIds;
    }

1

您可以使用“超级产品属性”部分来提高关联产品的默认价格。相关产品的价格将继续出现在“管理”面板中。在商店中,该商品将为零,除非您输入新价格作为固定金额或可配置产品默认价格的百分比。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.