【问题标题】:Magento - Promotions don't apply to downloadable files pricesMagento - 促销不适用于可下载文件的价格
【发布时间】:2013-04-10 08:57:14
【问题描述】:

初始条件:

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

有关促销的更多信息:

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

预期结果:

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

实际结果:

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

结论:

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

问题:

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

【问题讨论】:

  • 我很快就会给你答案:)

标签: magento magento-1.7


【解决方案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;
    }
}

我已经对其进行了测试并确认其工作正常:)

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

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

【讨论】:

  • 谢谢!我会尽可能奖励赏金(似乎在 23 小时内,因为原来的奖励已经过期)。还有一件事,你知道这是一个错误,还是这是预期的功能?
  • 我认为它作为链接产品的预期功能与目录产品不同。很高兴该解决方案适合您 :) 稍后会发布其他购物车规则
【解决方案2】:

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

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

【讨论】:

  • 虽然这是真的,但它并不能真正回答我的问题。在我的特殊情况下,我不得不使用“每个产品”规则。
  • 已添加。这是唯一的规则
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-28
  • 1970-01-01
  • 1970-01-01
  • 2013-10-18
  • 1970-01-01
相关资源
最近更新 更多