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?

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.


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

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

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.


1
si vous utilisez isSubscribed (), il n'est pas nécessaire d'utiliser$subscriberModel->getId()
Amit Bera
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.