Magento - 促销不适用于可下载的文件价格

时间:2013-04-10 08:57:15

标签: magento magento-1.7

初始条件:

  • 安装了Magento 1.7(未尝试使用以前的版本)
  • 一个(可下载)产品,包含多个可下载文件,价格已添加到默认产品中(假设产品成本 50 $ + 2个可下载文件,一个免费,另一个额外 50 $
  • 适用于所有产品的新促销(目录价格规则)(假设 -20%

有关促销的更多信息:

适用于所有产品,所有群组均有效并已应用,适用'原始价格的百分比',启用子产品折扣 - >是的,停止进一步处理规则 - >否

预期结果:

50美元档案的产品价格: 80 $ (80%来自100 $)

实际结果:

50美元文件的产品价格: 90美元(最初50美元的80%,以及可下载文件的全价)。

结论:

促销不适用于可下载文件的额外价格。

问题(S):

  • 这是可下载文件的理想行为吗?或者这是一个错误吗?
  • 有关如何修改代码(最终创建模块)以使其按预期工作的任何提示? (只是提示,即扩展内容)

2 个答案:

答案 0 :(得分:1)

链接/可下载文件不是产品实体(因此它没有price_index表,也不作为产品对待)

有两种方法可以在产品中应用促销

  1. 目录价格规则

  2. 购物车价格规则

  3. 正如您的问题所述,您使用了目录价格规则,我已使用目录价格规则解决了您的问题。

    创建模块并重写模型

    Mage_Downloadable_Model_Product_Type
    

    ==

    <global>
        <models>
            <downloadable>
                <rewrite>
                    <product_type>Web_Eproduct_Model_Downloadable_Product_Type</product_type>
                </rewrite>
            </downloadable>
        </models>
    </global>
    

    以及以下代码即时计算每个链接的价格(即使您对同一产品应用了多个规则)

    class Namespace_Modulename_Model_Downloadable_Product_Type extends Mage_Downloadable_Model_Product_Type {
        public function getLinks($product = null)
        {
            $product = $this->getProduct($product);
            $wId = Mage::app()->getWebsite()->getId();
            $gId = Mage::getSingleton('customer/session')->getCustomerGroupId();
            $catalogRules = Mage::getSingleton('catalogrule/resource_rule')->getRulesFromProduct('',$wId,$gId,$product->getId());
    
            /* @var Mage_Catalog_Model_Product $product */
            if (is_null($product->getDownloadableLinks())) {
                $_linkCollection = Mage::getModel('downloadable/link')->getCollection()
                    ->addProductToFilter($product->getId())
                    ->addTitleToResult($product->getStoreId())
                    ->addPriceToResult($product->getStore()->getWebsiteId());
                $linksCollectionById = array();
                foreach ($_linkCollection as $link) {
                    /* @var Mage_Downloadable_Model_Link $link */
    
                    $link->setProduct($product);
    
                    $link->setPrice($this->calcLinkPrice($catalogRules,$link->getPrice()));
                    $linksCollectionById[$link->getId()] = $link;
                }
                $product->setDownloadableLinks($linksCollectionById);
            }
            return $product->getDownloadableLinks();
        }
        public function calcLinkPrice(array $rules = array(),$productPrice = 0 )
        {
            foreach($rules as $ruleData)
            {
                $productPrice = Mage::helper('catalogrule')->calcPriceRule(
                    $ruleData['action_operator'],
                    $ruleData['action_amount'],
                    $productPrice);
            }
            return $productPrice;
        }
    }
    

    我已经测试过它,并确认它按预期工作:)

    尝试一下,让我知道你的想法:)

    如果您将使用购物车价格规则,还有另一种方法可以实现这一点,我将在稍后发布。

答案 1 :(得分:-1)

Magento,目录和购物车价格规则中有两种类型的定价规则。产品目录规则在产品添加到购物车之前制定,而购物车价格规则在购物车中应用。

您应将此促销设置为购物车价格规则