1

I've been looking for a while at other threads, several have been close to what I need but not quite.

When a guest or customer sign up for our newsletter the field change_status_at populates with a timestamp.

However, if the guest or customer unsubscribe, we would like the the change_status_at field to pickup the current timestamp.

This is important to use because we do not use the newsletter "feature" of Magento 1.7.0.2 CE. Rather we export the newletter_subscriber list to a company to send an email.

Thank you,

Dan

4

1 回答 1

0

我也遇到了这个。客户想知道订阅/取消订阅操作发生的日期。环顾互联网,我发现其他一些人遇到了这个问题,有些人声称它曾经在非常旧的 Magento 版本中工作。

我认为发生的事情是 change_status_at 的字段定义曾经设置为自动更新为默认时间戳(即 ON UPDATE CURRENT_TIMESTAMP),但在某些更新中丢失了。所以没有写入该字段的 Magento 代码,因为 MySql 应该神奇地维护它。

您可以尝试更新表定义以重新添加 ON UPDATE CURRENT_TIMESTAMP(但我不赞成更改默认模型表)或添加另一个字段作为默认时间戳字段。

或者更好的解决方案是创建一个带有观察者的模块,以便在订阅更改时添加日期。这可能看起来像(警告 - 此代码只是一个示例,由于删除我的模块信息可能存在一些语法错误) -

应用程序/代码/本地/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()));
    }
}
于 2013-08-22T21:41:00.097 回答