Установить статус подписчика в Magento программно - PullRequest
8 голосов
/ 25 февраля 2011

Я пытаюсь написать модуль, который синхронизирует подписчиков моей рассылки в Magento с внешней базой данных.Мне нужно иметь возможность обновлять статус подписки в Magento программно, но я испытываю затруднения, заставляя работать метод setStatus в Magento.Он не выдает никаких ошибок, но код, похоже, не имеет никакого эффекта.Ниже приведен код, где я вызываю метод:

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

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

Теоретически, это должно установить статус всех моих подписчиков как «подписанных».При желании я мог бы изменить аргумент, отправляемый в «setStatus», на любой из указанных ниже целочисленных значений для другого статуса.

1: подписан 2: статус не активен 3: отписан

Как лучше всегостатус подписчика или этот код работает?

Ответы [ 3 ]

8 голосов
/ 18 сентября 2012

Вот скрипт импорта:

<?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();
}
?>
5 голосов
/ 25 февраля 2011

Кажется, что подписчики на рассылку также хранятся в другом месте. То, что вы настраиваете, это просто проверка в клиентской базе для какого-то другого использования.

Для каждого клиента также необходимо сделать следующее.

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

См. эту ссылку для полной справки.

3 голосов
/ 01 мая 2011

Благодаря полученной ссылке @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 Synchronization, которое я делал: http://www.freelunchlabs.com/store/constant-contact-and-magento-sync.html

...