我创建了一个模块,如果他们是新客户或者在过去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检测到服务器正在以永远无法完成的方式重定向此地址的请求。
答案 0 :(得分:0)
问题是:
你正在调用parent:addAction(),它重定向回indexAction,这是你的indexAction,它会调用父:addAction ...再次重定向循环。
错误代码:
public function indexAction() {
parent::addAction();
$this->autoApplySubsidaryDiscount();
}
您不能在上面看到的自定义indexAction中调用addAction!
解决方案:
删除
public function indexAction(){ 父::的addAction(); $这 - &GT; autoApplySubsidaryDiscount(); }
更改
public function addAction(){
$这 - &GT; autoApplySubsidaryDiscount();
父::的addAction();
}
完成。
但更好的是改写控制器将使用一个观察者...但那是我想的另一个线程:)