Как проверить, если клиент уже подписан на информационный бюллетень

magento.stackexchange https://magento.stackexchange.com/questions/3316

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

  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;
        }
    }

По моему мнению, ни один из вышеперечисленных ответов не очень удобен тем, что они либо не проверяют, действительно ли клиент подписан, либо не обрабатывает случай, когда подписка не была найдена, поэтому здесь идет:

$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();
    }
}

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top