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


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 ('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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.