首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >购物车的规则正好相反

购物车的规则正好相反
EN

Stack Overflow用户
提问于 2012-02-08 22:55:21
回答 1查看 2.2K关注 0票数 1

我们增加了一个“是/否”的产品属性,标签是:“允许这个产品有优惠券吗?”默认值为“是”。

这样做的原因是,我们从来不希望销售团队在现有的数千种核心产品中给予折扣。

我们可以将这些产品作为SKU添加到创建的每一张优惠券中,但这可能会被意外地改变,或者由创建优惠券的销售团队不恰当地列出。

因此,我们要求他们在新的优惠券中增加这一规则,以排除这些产品。我们还通过代码更新了所有其他优惠券,以包括此规则。

当我测试Magento1.5,condition上的规则时,它所做的与条件完全相反。

当我在另一个企业解决方案(Magento1.9)上测试相同的规则时,它实际上做了它应该做的事情。

当我在购物车中有一个产品时,作为一个属性设置为"No“的产品,并且我应用了优惠券代码,它接受优惠券代码。在另一个系统(企业),它拒绝它,因为它应该。

还有其他人遇到过这个吗?

更新:好的,这变得更有趣了。当我跨过规则类时,产品被传递了,但是产品属性没有通过。范围被设置为网站,我检查了它是否保存在后端的范围下。

这真的很奇怪..。

在企业系统上,产品属性具有相同的配置和数据。

我甚至试着不要有双重否定,另一个新的属性,以确保。违反以下规则,优惠券将被拒绝:“优惠券代码无效。”这是正确的,因为产品被设置为“可以使用优惠券?=否”。

但问题是,我不想检查所有其他产品,而是针对少数被标记为“否”的产品。

无论如何,这不会对我们起作用,因为如果购物车中有任何产品的值为"No“,则我们不想应用优惠券,因为属性”可以使用优惠券吗?“。

--这是一个双重否定规则,不管你怎么看待它。

当我第二次添加产品时,我逐步遍历了/app/code/core/Mage/SalesRule/Model/Rule/Condition/Product.php函数,数据显示在属性中,但是当我重新应用优惠券,再次遍历这个函数时,这些值就消失了。这太奇怪了。

在购物车中添加新产品时:

当重新应用优惠券代码时:

,在那里他妈的进行了描述,其他一些属性消失在了?中。

更新注意:我越来越近了。当我在"/app/code/core/Mage/SalesRule/Model/Rule/Condition/Product.php“中更改以下validate()函数时,如下所示:

代码语言:javascript
复制
public function validate(Varien_Object $object)
{
    $product = false;
    if ($object->getProduct() instanceof Mage_Catalog_Model_Product) {
        $product = $object->getProduct();
    } else {
        $product = Mage::getModel('catalog/product')
            ->load($object->getProductId());
    }

    $product
        ->setQuoteItemQty($object->getQty())
        ->setQuoteItemPrice($object->getPrice())
        ->setQuoteItemRowTotal($object->getBaseRowTotal());

    return parent::validate($product);
}

对此:

代码语言:javascript
复制
public function validate(Varien_Object $object)
{
    $product = false;
    $product = Mage::getModel('catalog/product')
        ->load($object->getProductId());

    $product
        ->setQuoteItemQty($object->getQty())
        ->setQuoteItemPrice($object->getPrice())
        ->setQuoteItemRowTotal($object->getBaseRowTotal());

    return parent::validate($product);
}

它工作得很好!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-10 01:11:52

找到了实际的问题,下面是我为解决方案所做的工作:

以下位获取购物车价格规则的产品数据:

代码语言:javascript
复制
        if ($object->getProduct() instanceof Mage_Catalog_Model_Product) {
            $product = $object->getProduct();
        } else {
            $product = Mage::getModel('catalog/product')
                ->load($object->getProductId());
        }

罪魁祸首是这一行:$product = $object->getProduct();

它调用“Quote/Item/Digact.php”中的一行:$product = $this->_getData('product');

它将简单地从系统中获取缓存的数据,其中包括如下所选内容:

代码语言:javascript
复制
$productCollection = Mage::getModel('catalog/product')->getCollection()
    ->setStoreId($this->getStoreId())
    ->addIdFilter($this->_productIds)
    ->addAttributeToSelect(Mage::getSingleton('sales/quote_config')->getProductAttributes())
    ->addOptionsToResult()
    ->addStoreFilter()
    ->addUrlRewrite()
    ->addTierPriceData();

这方面的问题是,下面一行:

代码语言:javascript
复制
->addAttributeToSelect(Mage::getSingleton('sales/quote_config')->getProductAttributes())

它将只获得在Config.xml中为引号项定义的属性:

代码语言:javascript
复制
    <quote>
        <item>
            <product_attributes>
                <sku/>
                <type_id/>
                <name/>
                <status/>
                <visibility/>
                <price/>
                <weight/>
                <url_path/>
                <url_key/>
                <thumbnail/>
                <small_image/>
                <tax_class_id/>
                <special_from_date/>
                <special_to_date/>
                <special_price/>
                <cost/>
                <is_recurring/><!-- for totals calculation, placing and processing order -->
                <recurring_profile/><!-- for placing order -->
                <gift_message_available/>
            </product_attributes>
        </item>
    </quote>

这将无法获得我想要的新的自定义属性,而且规则将永远无法正确地将数据与期望值进行比较。

将下面的xml添加到我的自定义销售模块config.xml中,解决了这个问题,该模块中包含一些用于其他内容的观察者。

代码语言:javascript
复制
<sales>
    <quote>
        <item>
            <product_attributes>
                <exclude_from_coupon/>
            </product_attributes>
        </item>
    </quote>                
</sales>

,那么这一切都成功了!

为什么在企业版magento中工作?

不太清楚。我认为Enterprise可能正在寻找实际属性定义上的设置,并将其包含到要收集的属性列表中,然后返回数据。我将对此进行研究,并将其更新到文章中。

至少我现在知道真正的问题是什么,以及购物车规则条件(优惠券)失败的原因。

感谢所有帮助我提出好的问题和建议的人。

又有一天更明智了.

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9202823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档