自定义Events&Observer来实现订单评论(Custom Order Comments)
来源:互联网 发布:touch4怎么找老版软件 编辑:程序博客网 时间:2024/05/21 19:27
除了强大的面向对象机制,比如重写或者继承来覆盖Magento本身的行为之外,还可以通过事件观察者模式来更新Magento固有的工作线路。
事件(Events)是发生在某一特定的地方的顺序流。打个比方说,客户下订单的顺序流:
1. 保存订单的详细信息
2. 发送订单的确认信息给客户
事件则可能在邮件的发出之前或者之后来引入自定义逻辑。
观察者(Observer)是一个事件的处理程序。它监听对应的事件,并且做出相应的反应。
使用Events + Observer 来覆盖行为类
简单地说,假设你需要彻底改变或者延长核心的逻辑,那么你的新逻辑将被重用或者覆盖现有的核心逻辑。如果你是对Magento提供的现有逻辑比较熟悉,并且需要添加新的核心逻辑的话,请使用事件。
举个例子,客户下单前,可以添加自己的附近信息。
Step 1 激活你的module
我们创建一个叫CustomerOrderComments的模块,并且以Yip来作为命名空间。
<?xml version="1.0"?><config> <modules> <Yip_CustomerOrderComments> <active>true</active> <codePool>local</codePool> </Yip_CustomerOrderComments> </modules></config>Step 2 创建模块的配置文件
针对checkout_type_onepage_save_order事件,我们加入自己的观察者来进行监听,我们把observer类命名为Yip_CustomerOrderComments_Model_Observer
<?xml version="1.0"?><config> <modules> <Yip_CustomerOrderComments> <version>0.1.0</version> </Yip_CustomerOrderComments> </modules><frontend><events><checkout_type_onepage_save_order><observers><Yip_CustomerOrderComments_Onepage><type>singleton</type><class>Yip_CustomerOrderComments_Model_Observer</class><method>setCustomerOrderComments</method></Yip_CustomerOrderComments_Onepage></observers></checkout_type_onepage_save_order></events></frontend></config>Step 3 创建模版
在app\design\frontend\default\your_template\template\checkout\onepage下重新写agreements.phtml模版,这里主要是加入textarea元素,命名name为customerOrderComments,方便Observer接收。
<?php if (!$this->getAgreements()) return; ?><form action="" id="checkout-agreements" onsubmit="return false;"><ol class="checkout-agreements"><?php foreach ($this->getAgreements() as $_a): ?> <li> <div class="agreement-content"<?php echo ($_a->getContentHeight() ? ' style="height:' . $_a->getContentHeight() . '"' : '')?>> <?php if ($_a->getIsHtml()):?> <?php echo $_a->getContent() ?> <?php else:?> <?php echo nl2br($this->htmlEscape($_a->getContent())) ?> <?php endif; ?> </div> <p class="agree"> <input type="checkbox" id="agreement-<?php echo $_a->getId()?>" name="agreement[<?php echo $_a->getId()?>]" value="1" /> <label for="agreement-<?php echo $_a->getId()?>"><?php echo $_a->getCheckboxText()?></label> </p> </li><?php endforeach ?></ol><ol class="checkout-agreements"> <li><label for="customerOrderComments"><?php echo Mage::helper('core')->__('Other Quote Information') ?></label><br/><textarea name="customerOrderComments" id="customerOrderComments" style="width:450px;height:100px;"></textarea></li></ol></form>
Step 4 创建观察者类
class Yip_CustomerOrderComments_Model_Observer{ public function setCustomerOrderComments(Varien_Event_Observer $observer) { $_order = $observer->getEvent()->getOrder(); $_request = Mage::app()->getRequest(); $_comments = strip_tags($_request->getParam('customerOrderComments')); if(!empty($_comments)){ $_order->setCustomerNote('<br/><strong>Extra Instructions:</strong> ' .$_comments);$_order->addStatusHistoryComment('<br/><strong>Extra Instructions:</strong> ' .$_comments);//$_order->save(); } return $this; }}
这里用getparam接收模版中的customerOrderComments,并且将其用setCustomerNote的方法来保存。OK,附上两个效果图:
前台下单前:
】
后台订单页:
That's all! Thanks~
转载请表明出处,谢谢!
- 自定义Events&Observer来实现订单评论(Custom Order Comments)
- Magento Observer for order state is complete events
- 订单评论:
- Custom Events in JavaScript
- libev custom events
- Handling events within custom components
- Java Spring Tutorial -- Custom Events
- 实现自定义模型(Implementing Custom Models)
- Django使用forms来实现评论功能
- 新浪微博 评论Comments模型类
- HP GDCC IT 评论(comments)
- Django contrib Comments 评论模块详解
- 实现淘宝订单(比如订单生成、未支付的订单等等)自定义view的实现
- Page Events: Order and PostBack
- Siebel Tools: Order of Events
- Django自定义标签实现多级评论
- Ruby on rails开发从头来(windows)(十一)-订单(Order)
- Ruby on rails开发从头来(windows)(十二)-订单(Order)
- Failed to create the Java Virtual Machine
- c语言中不使用操作符实现两个数相加
- QEMU分页机制分析
- Gentoo 历程(7):压缩portage树,并放到/var
- 在session.setAttribute("from",from);报出form cannot be resolved
- 自定义Events&Observer来实现订单评论(Custom Order Comments)
- linux多线程-线程资源释放
- 第十七天博客
- NFC--近距离无线通讯技术(2)
- 比较Java Swing中三种注册事件的方法
- Qt4 Phonon多媒体框架详解及简单实例
- 使用动态光标
- C++ 虚函数
- 第十八天博客