Magento重定向环路-购物车控制器在一侧


Magento Redirect Loop - Cart Controller Overide

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

所以我有:

app/code/local/Brave/辅助/控制器/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/Setudentary/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检测到服务器正在以一种永远不会完成的方式重定向对此地址的请求

问题是:

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

错误代码:

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

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

解决方案:

  1. 删除

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

  2. 更改

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

完成。

但更好的方法是重写控制器,使用观察器。。。但我想这是另一个线程:)