0

我创建了一个模块,如果客户是新客户或在过去 24 小时内未订购,则将折扣代码添加到客户购物车中,这是为一家公司为其员工提供午餐的公司,他们每天都会收到一个子公司使用3.00 英镑。

所以我有:

app/code/local/Brave/Subsidary/controllers/CartController.php

<?php

require_once Mage::getModuleDir('controllers', 'Mage_Checkout').DS.'CartController.php';

class Brave_Subsidary_CartController extends Mage_Checkout_CartController {

    const DISCOUNTCODE = 'BCOMSTAFF';

    public function addAction() {
        parent::addAction();
        $this->autoApplySubsidaryDiscount();
    }

    public function indexAction() {
        parent::addAction();
        $this->autoApplySubsidaryDiscount();
    }

    public function autoApplySubsidaryDiscount() {

        $customer = Mage::getSingleton('customer/session')->getCustomer();
        $orders = Mage::getResourceModel('sales/order_collection')
        ->addFieldToSelect('*')
        ->addFieldToFilter('customer_id', $customer->getId()); 

        if(!$orders->getSize()) {

            // New Customer...     
            $this->applyDiscountCoupon();

        } else {

            // Check last order date
            $orderCollection = Mage::getModel('sales/order')->getCollection()
            ->addFilter('customer_id', $customer->getId())
            ->setOrder('created_at', Varien_Data_Collection_Db::SORT_ORDER_DESC);

            $newestOrder = $orderCollection->getFirstItem();

            $dateToday = Mage::getModel('core/date')->timestamp(time());
            $lastOrderDate = Mage::getModel('core/date')->timestamp(strtotime($newestOrder->getData('created_at')));

            // only apply if last order was more than 24hrs ago..
            if( $dateToday > $lastOrderDate ) {

                $this->applyDiscountCoupon();   

            }

        }

    }

    public function applyDiscountCoupon() {
        Mage::getSingleton("checkout/session")->setData("coupon_code",self::DISCOUNTCODE);
        Mage::getSingleton('checkout/cart')->getQuote()->setCouponCode(self::DISCOUNTCODE)->save();     
    }

}
?> 

app/code/local/Brave/Subsidary/etc/config.xml

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <Brave_Subsidary>
            <version>0.1.0</version>
        </Brave_Subsidary>
    </modules>
    <frontend>
        <routers>
            <checkout>
                <use>standard</use>
                <args>
                    <modules>
                        <Brave_Subsidary before="Mage_Checkout">Brave_Subsidary</Brave_Subsidary>
                    </modules>
                </args>
            </checkout>
        </routers>
    </frontend>
</config>

然后我的模块文件: app/etc/modules/Brave_Subsidary.xml

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <Brave_Subsidary>
            <active>true</active>
            <codePool>local</codePool>
        </Brave_Subsidary>
    </modules>
</config> 

问题是我在购物车页面上或从向购物车中添加商品时获得了重定向循环,这可能是一个非常简单的问题,但尝试谷歌搜索任何相关的东西都是大海捞针!

FireFox 告诉我的错误是:

Firefox 检测到服务器正在以永远不会完成的方式重定向对该地址的请求。

4

1 回答 1

0

问题是:

您正在调用 parent:addAction() ,它重定向回 indexAction ,这是您的 indexAction ,它再次调用 parent:addAction ...因此重定向循环。

错误代码:

   public function indexAction() {
        parent::addAction();
        $this->autoApplySubsidaryDiscount();
    }

您不能在上面看到的自定义 indexAction 中调用 addAction!

解决方案:

  1. 消除

    公共函数 indexAction() { parent::addAction(); $this->autoApplySubsidaryDiscount(); }

  2. 改变

    公共函数 addAction() { $this->autoApplySubsidaryDiscount(); 父::addAction();
    }

完毕。

但更好的是重写控制器是使用观察者......但我猜那是另一个线程:)

于 2013-07-08T12:48:36.160 回答