Magento无法设置自定义评论时间

很多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()