4

初始状态:

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

有关促销的更多信息:

适用于所有产品、所有组、处于活动状态且已应用,“按原价的百分比”应用,为子产品启用折扣 -> 是,停止进一步处理规则 -> 否

预期结果:

带有 50 美元文件的产品价格:80 美元(100 美元的 80%)

实际结果:

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

结论:

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

问题):

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

2 回答 2

1

链接/可下载文件不是产品实体(因此它没有 price_index 表并且不被视为产品)

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

  1. 目录价格规则

  2. 购物车价格规则

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

创建模块并重写模型

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;
    }
}

我已经对其进行了测试并确认它可以按您的预期工作:)

试试看,让我知道你的想法:)

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

于 2013-04-20T20:40:57.210 回答
-1

Magento 中有 2 种价格规则,目录和购物车价格规则。商品加入购物车前会制定目录规则,而购物车价格规则则应用于购物车。

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

于 2013-04-18T06:42:19.330 回答