Как проверить, подписан ли клиент на рассылку

14

Мне нужно проверить, подписан ли клиент на новостное письмо или нет. В настоящее время я использую этот код, и он ничего не возвращает:

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

Это ничего не дает. Есть идеи, как заставить это работать?

ravisoni
источник

Ответы:

21

В качестве альтернативы вы можете попробовать это, если у вас есть адрес электронной почты клиента:

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

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

Mufaddal
источник
3
я использовал этот код. $ email = Mage :: getSingleton ('customer / session') -> getCustomer () -> getEmail (); $ subscriber = Mage :: getModel ('рассылка / подписчик') -> loadByEmail ($ email); $ status = $ subscriber-> isSubscribeed ();
ravisoni
Как я могу проверить, подписан ли гостевой клиент (НЕ зарегистрированный клиент) на рассылку, в том же сеансе клиента.
Шатиш
@ravisoni отличный ответ !!! :)
jruzafa
is_subscribed
Можете
@ 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();
    }
}
Луи Б.
источник
Я добавил этот код в файл наблюдаем.php, но не получить ничего о подписке или нет.
Сарфарадж Сипай
2

Чтобы расширить ответ @ Mufaddal:

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

Таким образом, вы проверяете, есть ли запись подписки И если статус подписки истинен.

Тимон де Гроот
источник
1
если вы используете isSubscribeed (), тогда его не нужно использовать$subscriberModel->getId()
Amit Bera