Comment vérifier si le client est déjà abonné à la newsletter

14

Je dois vérifier si le client est abonné à la newsletter ou non. Actuellement j'utilise ce code et il ne retourne rien:

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

Cela ne donne rien. Une idée de comment faire fonctionner ça?

ravisoni
la source

Réponses:

21

Vous pouvez également essayer ceci, si vous avez l'adresse e-mail du client:

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

Ou si vous avez un ID client, vous pouvez directement enregistrer le newsletter_subscribertableau pour vérifier si l'ID client existe ou non.

Mufaddal
la source
3
j'ai utilisé ce code. $ email = Mage :: getSingleton ('client / session') -> getCustomer () -> getEmail (); $ subscriber = Mage :: getModel ('newsletter / abonné') -> loadByEmail ($ email); $ status = $ subscriber-> isSubscribed ();
ravisoni
comment pourrais-je vérifier si un client invité (client NON CONNECTÉ) s'est abonné à la newsletter, dans la même session client.
Shathish
@ravisoni excellente réponse !!! :)
jruzafa
pouvez-vous me dire is_subscribedest dans quelle table enregistrer ou est-il enregistré en session
ND17
@ ND17 le statut d'un abonné à la newsletter est stocké dans `newsletter_subscriber`.`subscriber_status`. Notez que le nom de la table peut avoir un préfixe en fonction de votre configuration.
Darren Felton
6

Vous devez également vérifier l'état de l'abonnement:

  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
la source
Votre réponse doit être acceptée, les autres ne se soucient pas si le client est désabonné ou en attente
Alex
4

À mon avis, aucune des réponses ci-dessus n'est très pratique dans la mesure où elles ne vérifient pas si le client est réellement abonné ou ne gèrent pas le cas où un abonnement n'a pas été trouvé, alors voici:

$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.
la source
j'ai ajouté ce code dans le fichier observer.php mais je ne reçois rien sur l'abonnement ou non.
Sarfaraj Sipai
2

Pour étendre la réponse de @ Mufaddal:

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

De cette façon, vous vérifiez si l'enregistrement d'abonnement est présent ET si l'état de l'abonnement est vrai.

Timon de Groot
la source
1
si vous utilisez isSubscribed (), il n'est pas nécessaire d'utiliser$subscriberModel->getId()
Amit Bera