8

我正在尝试编写一个模块,将 Magento 中的时事通讯订阅者与外部数据库同步。我需要能够以编程方式更新 Magento 中的订阅状态,但我很难让 Magento 中的“setStatus”方法工作。它不会引发任何错误,但代码似乎没有任何效果。下面是我调用该方法的代码:

$collection = Mage::getResourceModel('newsletter/subscriber_collection')->showStoreInfo()->showCustomerInfo();

foreach ($collection as $cust) {
    $cust->setStatus(1);
}

理论上,这应该将我所有订阅者的状态设置为“订阅”。我可以选择将发送到“setStatus”的参数更改为以下任何一个整数以获得不同的状态。

1:已订阅 2:状态未激活 3:未订阅

如何最好地更改订阅者状态或让此代码正常工作?

4

3 回答 3

8

这是一个导入脚本:

<?php
require_once("./app/Mage.php");
Mage::app();

$subscribers = array('email1@server1.com', 'email2@server2.com');

foreach ($subscribers as $email) {
    # create new subscriber without send an confirmation email
    Mage::getModel('newsletter/subscriber')->setImportMode(true)->subscribe($email);

    # get just generated subscriber
    $subscriber = Mage::getModel('newsletter/subscriber')->loadByEmail($email);

    # change status to "subscribed" and save
    $subscriber->setStatus(Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED);
    $subscriber->save();
}
?>
于 2012-09-18T15:59:16.217 回答
5

似乎通讯订阅者也存储在其他地方。您所设置的只是检查客户群以供其他用途。

您还需要为每个客户执行以下操作。

Mage::getModel('newsletter/subscriber')->subscribe($email);

请参阅链接以获取完整参考。

于 2011-02-25T04:56:09.430 回答
3

感谢@Ozair 分享的链接,我能够弄清楚我需要做什么。

我在 Magento 订阅者对象中成功设置了订阅者的状态,但我没有保存该对象。我需要调用 Magento 的保存方法,以便它调用 ORM 并将其写入数据库。我需要做的就是添加

$cust->save();

在 for 循环中。下面是整个代码片段。

$collection = Mage::getResourceModel('newsletter/subscriber_collection')->showStoreInfo()->showCustomerInfo();

foreach ($collection as $cust) {
    $cust->setStatus(1);
    $cust->save();
}

我希望这对将来的某人有所帮助。我需要它来进行恒定联系 - 我正在制作的 Magento 同步扩展:http ://www.freelunchlabs.com/store/constant-contact-and-magento-sync.html

于 2011-04-30T21:50:59.667 回答