Magento Redirect Loop - 推车控制器覆盖

时间:2013-07-08 11:37:39

标签: php magento http-redirect

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

所以我有:

应用/代码/本地/勇敢/资助工作/控制器/ CartControlller.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();     
    }

}
?> 

应用/代码/本地/勇敢/资助工作的/ 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>

然后我的模块文件: 应用的/ etc /模块/ Brave_Subsidary.xml

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

问题在于我在购物车页面上获得了一个重定向循环,或者是将一个项目添加到购物车中,这可能是一个非常简单的问题,但尝试Google相关的任何内容都是大海捞针!

FireFox告诉我的错误是:

Firefox检测到服务器正在以永远无法完成的方式重定向此地址的请求。

1 个答案:

答案 0 :(得分:0)

问题是:

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

错误代码:

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

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

解决方案:

  1. 删除

    public function indexAction(){  父::的addAction();  $这 - &GT; autoApplySubsidaryDiscount(); }

  2. 更改

    public function addAction(){  $这 - &GT; autoApplySubsidaryDiscount();  父::的addAction();
    }

  3. 完成。

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