我已经寻找了一段时间在其他线程,有几个已经接近我需要的,但不完全。
当客人或客户注册我们的时事通讯时,字段change_status_at将填充时间戳。
但是,如果来宾或客户取消订阅,我们希望change_status_at字段获取当前时间戳。
这一点很重要,因为我们没有使用Magento 1.7.0.2 CE的时事通讯“特性”。相反,我们将newletter_subscriber列表导出到公司以发送电子邮件。
谢谢,
丹
发布于 2013-08-23 05:41:00
我也遇到了这样的情况。客户想知道订阅/取消订阅操作发生的日期。环顾互联网,我发现其他一些人也遇到了这种情况,一些人声称它曾经在非常旧的Magento版本中工作。
我认为发生的情况是,change_status_at的字段定义过去被设置为自动更新为默认时间戳(例如,在更新CURRENT_TIMESTAMP时),但在某些更新中丢失了。所以没有Magento代码来写入字段,因为MySql应该神奇地维护它。
您可以尝试更新表定义以重新添加ON UPDATE CURRENT_TIMESTAMP (但我不赞成更改默认模型表),或者添加另一个字段作为默认时间戳字段。
或者,更好的解决方案是创建一个带有观察者的模块,以便在订阅更改时添加日期。这可能看起来像(警告-这段代码只是一个例子,可能有一些语法错误,因为删除了我的模块的信息)-
app/code/local/Myco/MyMod/etc/config.xml
<?xml version="1.0"?>
<config>
<modules>
<Myco_MyMod>
<version>1.0.0</version>
</Myco_MyMod>>
</modules>
<global>
<models>
<myco>
<class>Myco_MyMod_Model</class>
</myco>
</models>
<events>
<newsletter_subscriber_save_before>
<observers>
<mycomymod_observer_subscriber>
<type>singleton</type>
<class>Myco_MyMod_Model_Observer</class>
<method>setUpdateDate</method>
</mycomymod_observer_subscriber>
</observers>
</newsletter_subscriber_save_before>
</events>
</global>
</config>===========
在app/code/local/Myco/MyMod/Modules/Observer.php中
<?php
class Myco_MyMod_Model_Observer
{
public function setUpdateDate(Varien_Event_Observer $observer) {
$subscriber = $observer->getSubscriber();
$subscriber['change_status_at'] = (date("Y-m-d H:i:s", time()));
}
}https://stackoverflow.com/questions/14551928
复制相似问题