magento添加最后修改等信息

网站上的经常出促销规则经常被篡改了导致促销出现问题,出了事情后也没有人敢承认是自己改的,于是有一个小任务是给magento的规则加一个创建人,创建时间,最后修改人,最后修改时间等信息

这里在salesrule表加了4个字段,升级脚本:

1
2
3
4
ALTER TABLE `salesrule` ADD `created_by` varchar(50) DEFAULT NULL COMMENT '创建人';
ALTER TABLE `salesrule` ADD `last_mofified_by` varchar(50) DEFAULT NULL COMMENT '最后修改人';
ALTER TABLE `salesrule` ADD `created_at` datetime DEFAULT '0000-00-00 00:00:00' COMMENT '创建时间';
ALTER TABLE `salesrule` ADD `last_modified_at` datetime DEFAULT '0000-00-00 00:00:00' COMMENT '最后修改时间';

php代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$model = Core::getModel('salesrule/rule');
// 从session中拿出当前操作用户
$user = Core::getSingleton('admin/session')->getUser();
if ($user) {
$username = $user->getUsername();
// 如果是新建的规则设置创建人和创建时间
if ($model->isObjectNew()) {
$model->setCreatedBy($username);
$model->setCreatedAt(now());
}
// 设置最后修改人和最后修改时间
$model->setLastMofifiedBy($username);
$model->setLastModifiedAt(now());
}

now()是我们自己写的一个小函数,方便设置时间

1
2
3
4
function now($dayOnly=false)
{
return date($dayOnly ? 'Y-m-d' : 'Y-m-d H:i:s');
}

后台所有的保存动作,都设置last_mofified_bylast_modified_at信息,这里可以用isObjectNew()来判断是否是新创建的规则,如果是的还要设置created_bycreated_at信息

我是把这些字段的设置放在后台规则编辑saveAction()里面,如果放在rule的_beforeSave()方法里面,会导致只rule保存时会修改这些字段,比如生成新订单(如果订单中应用了规则,会更新规则的使用次数),这个并不是我想要的。

题外话:我这里直接在规则主表加这几个字段当成rule的属性来处理,方便以后在其它地方使用,如果只是想增加修改记录,可以通过配置logging.xml来实现