8

Magentoのニュースレター購読者を外部データベースと同期するモジュールを作成しようとしています。プログラムでMagentoのサブスクリプションステータスを更新できるようにする必要がありますが、Magentoの「setStatus」メソッドを機能させるのに問題があります。エラーはスローされませんが、コードは効果がないようです。以下は、メソッドを呼び出すコードです。

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

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

理論的には、これにより、すべてのサブスクライバーのステータスが「サブスクライブ済み」に設定されます。オプションで、「setStatus」に送信される引数を、別のステータスの以下のintのいずれかに変更できます。

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のsaveメソッドを呼び出して、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 に答える