Як перевірити, чи вже клієнт підписався на розсилку


14

Мені потрібно перевірити, підписаний клієнт на лист новин чи ні. В даний час я використовую цей код, і він нічого не повертає:

if (Mage::getSingleton('customer/session')->isLoggedIn()) {
    $status = Mage::getSingleton('customer/session')->getCustomer()->getIsSubscribed();
    echo $status;
    die();
}

Це нічого не дає. Будь-яка ідея, як змусити це працювати?

Відповіді:


21

Ви також можете спробувати це, якщо у вас є електронна адреса замовника:

$subscriber = Mage::getModel('newsletter/subscriber')->loadByEmail($email);
if ($subscriber->getId()) {
     // put your logic here...
}

Або якщо у вас є ідентифікатор клієнта, ви можете безпосередньо перевірити newsletter_subscriberтаблицю, щоб перевірити, чи існує ідентифікатор клієнта.


3
я використав цей код. $ email = Mage :: getSingleton ('клієнт / сесія') -> getCustomer () -> getEmail (); $ абонент = Mage :: getModel ('бюлетень / підписник') -> loadByEmail ($ email); $ status = $ абонент-> isSubscribed ();
ravisoni

як я міг перевірити, чи запрошений клієнт (НЕ ВІДПОВІДАЄТЬСЯ НА Клієнта) підписався на розсилку, в той же сеанс клієнта.
Шатіш

@ravisoni чудова відповідь !!! :)
jruzafa

Ви можете мені сказати is_subscribed, в якій таблиці зберегти чи зберегти її на сесії
ND17

@ ND17 статус абонента інформаційного бюлетеня зберігається в `newsletter_subscriber`.`subscriber_status`. Зауважте, що назва таблиці може мати префікс залежно від вашої конфігурації.
Даррен Фелтон

6

Ви також повинні перевірити статус підписки:

  if(Mage::getSingleton('customer/session')->isLoggedIn()){
        $email = Mage::getSingleton('customer/session')->getCustomer()->getData('email');
        $subscriber = Mage::getModel('newsletter/subscriber')->loadByEmail($email);
        if($subscriber->getId())
        {
            $isSubscribed = $subscriber->getData('subscriber_status') == Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED;
        }
    }

Ваша відповідь має бути прийнятою, інші - байдуже, якщо клієнт не підписався або очікує на розгляд
Алекс

4

На мою думку, жодна з перерахованих вище відповідей не є дуже зручною тим, що або не перевіряє, чи клієнт насправді підписаний, або не обробляє той випадок, коли підписки не знайдено, так ось що:

$customerIsSubscribed = false;
$customer = Mage::getSingleton('customer/session')->getCustomer();
if ($customer) {
    $customerEmail = $customer->getEmail();
    $subscriber = Mage::getModel('newsletter/subscriber')->loadByEmail($customerEmail);
    if ($subscriber) {
        $customerIsSubscribed = $subscriber->isSubscribed();
    }
}

я додав цей код у файл observer.php, але не отримаю нічого про підписку чи ні.
Сарфарай Сіпай

2

Щоб продовжити відповідь @ Mufaddal:

$subscriberModel = Mage::getModel('newsletter/subscriber')->loadByEmail($email);
$subbed = ($subscriberModel->isSubscribed() ? true : false);

Таким чином ви перевіряєте, чи є запис підписки І чи статус підписки справжній.


1
якщо ви використовуєте isSubscribed (), то його не потрібно використовувати$subscriberModel->getId()
Amit Bera
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.