很多magento网站都会人为的伪造很多产品评论,就会有导入产品review的需求。导入magento产品评论的代码没有难度,只是开发过程中多会碰到无法设置magento的评论自定义时间的问题,结果就是所有的评论时间几乎是一样的,这除非网站用户是智障了。。
问题产生原因
查看文件:Mage_Review_Model_Resource_Review
/**
* Perform actions before object save
*
* @param Varien_Object object
* @return Mage_Review_Model_Resource_Review
*/
protected function _beforeSave(Mage_Core_Model_Abstractobject)
{
if (!object->getId()) {object->setCreatedAt(Mage::getSingleton('core/date')->gmtDate());
}
if (object->hasData('stores') && is_array(object->getStores())) {
stores =object->getStores();
stores[] = 0;object->setStores(stores);
} elseif (object->hasData('stores')) {
object->setStores(array(object->getStores(), 0));
}
return $this;
}
上面的代码可以看出,magento的review在新建的时候强制设置了CreateAt的值,所以我们用下面的代码插入评论是没法设置自定义时间的。
$reviewModel->setData(……)->setCreateAt(时间)-save()
解决办法
简单暴力的处理方法,先save一次,再save。
$reviewModel->setData(……)-save()->setCreateAt(时间)-save()
保存2次,是不考虑性能什么的了。
修改代码,设置一个是否设置自定义时间的值IsCustomCreatedAt来控制。
protected function _beforeSave(Mage_Core_Model_Abstract object)
{
if (!object->getId() and !object->getIsCustomCreatedAt()) {object->setCreatedAt(Mage::getSingleton('core/date')->gmtDate());
}
if (object->hasData('stores') && is_array(object->getStores())) {
stores =object->getStores();
stores[] = 0;object->setStores(stores);
} elseif (object->hasData('stores')) {
object->setStores(array(object->getStores(), 0));
}
return $this;
}
然后我们插入评论代码如下
$reviewModel->setData(……)->setIsCustomCreatedAt(true)->setCreateAt(时间)-save()