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?

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.


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

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

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.


1
se você usar isSubscribed (), então ele não requer a utilização$subscriberModel->getId()
Amit Bera
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.