自定义Events&Observer来实现订单评论(Custom Order Comments)

原创 2012年03月25日 18:03:24

除了强大的面向对象机制,比如重写或者继承来覆盖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~

转载请表明出处,谢谢!


版权声明:本文为博主原创文章,未经博主允许不得转载。

Django1.6学习--为博客添加comments(评论)功能

Django1.6 不再自带comments这个app了,见官方解释 https://docs.djangoproject.com/en/1.6/ref/contrib/comments/e...
  • Geek_ymv
  • Geek_ymv
  • 2014年11月29日 19:57
  • 3724

ofbiz数据库表结构设计(3)- 订单ORDER

对于订单来说,主要的表就是ORDER_HEADER和ORDER_ITEM。ORDER_HEADER就是所谓的订单头,一条记录代表一条订单。 ORDER_PAYMENT_PREFERENCE是订单的支...
  • billhepeng
  • billhepeng
  • 2015年07月23日 10:26
  • 1409

Java80商城系统第九节-前端订单操作后台订单评论管理

转载自:http://www.java80.com/web/s/1_1.htm 代码下载地址:http://www.java80.com/web/s/1_1.htm 已完成订单流程:审...
  • noah100
  • noah100
  • 2016年09月13日 10:46
  • 447

Flask Web 开发 用户评论_2

国庆长假开始了。。。老老实实在家看书 评论功能做完了,后面就涉及到网站的管理员或者协管员对评论的操作了 这里网站上主要是单独做了一个按钮给管理员和协管员,通过导航栏里面这个按钮,他...
  • bestallen
  • bestallen
  • 2016年10月01日 19:25
  • 901

MM-框架订单(framework order)

框架订单就是针对某个期限的业务规定费用,方便财务处理。  1)ME21N:创建FO(图示见http://scnblogs.techweb.com.cn/bridge243/archives/cate...
  • Wengyuyu1234
  • Wengyuyu1234
  • 2012年03月09日 18:03
  • 1463

wordpress 修改ajax评论分页

今天小松又大修改了今天的评论,主要是发现【留下脚印】 评论太多,导致页面拉的很长,用户看起来也不是很好,于是就想对评论做个分页 ①wordpress开启评论分页 评论分页的设置在后台【设置】-【讨论】...
  • a454213722
  • a454213722
  • 2016年03月07日 12:00
  • 506

WordPress评论表单增加字段

问题描述 用 wp 的友友门都知道,wordpress评论表单的字段都只有4个,昵称、邮箱、网址、内容;评论是存在wp_comments表中的,如果要加上其它额外字段就得另寻它法了,例如:tel...
  • Xiao_QiangMa
  • Xiao_QiangMa
  • 2016年01月06日 11:30
  • 1084

淘宝 美团 评论标签效果

我们在淘宝,美团等APP的评论页面会看到,有很多评论的标签:好评,差评,有图什么的,这里我们通过代码去实现并不难,在这里我写了一段简写的代码,供大家参考...
  • SurpassBlack
  • SurpassBlack
  • 2016年02月29日 17:55
  • 609

HP GDCC IT 评论(comments)

http://lymemoryzz.com/upload/read.php?tid=4&fid=6 只是转载。。。。 今天我以一个加入HP GDCC 10年的老员工的身份发表一下这个...
  • lk5423968
  • lk5423968
  • 2014年01月14日 21:39
  • 1755

Android 多商品订单评价(类似淘宝)

前几日一商城类项目,有一需求,需要对一份订单的里面几个商品进行分别评价(图片,文字内容,星级);以前都是对一份订单所有商品一起评价,那种简单的多; 后来,承蒙老大细心指导,终于弄出来个看起来还算凑活的...
  • Morling0811
  • Morling0811
  • 2017年08月21日 10:48
  • 346
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自定义Events&Observer来实现订单评论(Custom Order Comments)
举报原因:
原因补充:

(最多只允许输入30个字)