Como verificar se o cliente já está inscrito na newsletter

14

Preciso verificar se o cliente está inscrito na carta de notícias ou não. Atualmente, estou usando esse código e ele não está retornando nada:

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

Isso não está dando nada. Alguma idéia de como fazer isso funcionar?

Ravisoni
fonte

Respostas:

21

Como alternativa, você pode tentar isso se tiver o endereço de e-mail do cliente:

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

Ou, se você tiver um ID do cliente, poderá fazer check-in diretamente na newsletter_subscribertabela para verificar se o ID do cliente existe ou não.

Mufaddal
fonte
3
Eu usei esse código. $ email = Mage :: getSingleton ('customer / session') -> getCustomer () -> getEmail (); $ assinante = Mage :: getModel ('newsletter / assinante') -> loadByEmail ($ email); $ status = $ subscriber-> isSubscribe ();
Ravisoni
como posso verificar se um cliente convidado (cliente NÃO COM LOGIN) se inscreveu para nesletter, na mesma sessão do cliente.
Shathish
@ravisoni great answer !!! :)
jruzafa
você pode dizer-me is_subscribedé em qual tabela Salvar ou é salvo em sessão
ND17
@ ND17 o status de um assinante de newsletter é armazenado `newsletter_subscriber`.`subscriber_status`. Observe que o nome da tabela pode ter um prefixo, dependendo da sua configuração.
precisa saber é o seguinte
6

Você também deve verificar o status da assinatura:

  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;
        }
    }
Babarus George
fonte
Sua resposta deve ser o único aceito, os outros não se importam se o cliente é retirado ou pendentes
Alex
4

Na minha opinião, nenhuma das respostas acima é muito conveniente, pois elas não verificam se o cliente está realmente inscrito ou não tratam do caso em que uma assinatura não foi encontrada, então aqui vai:

$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();
    }
}
Louis B.
fonte
Eu adicionei esse código no arquivo observer.php, mas não recebi nada sobre assinatura ou não.
Sarfaraj Sipai
2

Para estender a resposta de @ Mufaddal:

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

Dessa forma, você verifica se o registro de assinatura está presente E se o status da assinatura é verdadeiro.

Timon de Groot
fonte
1
se você usar isSubscribed (), então ele não requer a utilização$subscriberModel->getId()
Amit Bera