Jak sprawdzić, czy klient jest już zapisany do newslettera

14

Muszę sprawdzić, czy klient jest subskrybentem wiadomości, czy nie. Obecnie używam tego kodu i nic nie zwraca:

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

To nic nie daje. Masz pomysł, jak to zrobić?

ravisoni
źródło

Odpowiedzi:

21

Alternatywnie możesz spróbować, jeśli masz adres e-mail klienta:

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

Lub jeśli masz identyfikator klienta, możesz bezpośrednio sprawdzić w newsletter_subscribertabeli, czy istnieje identyfikator klienta, czy nie.

Mufaddal
źródło
3
użyłem tego kodu. $ email = Mage :: getSingleton ('customer / session') -> getCustomer () -> getEmail (); $ subscriber = Mage :: getModel ('newsletter / subscriber') -> loadByEmail ($ email); $ status = $ subscriber-> isSubscribe ();
ravisoni
w jaki sposób mogę sprawdzić, czy klient gościa (NIE ZALOGOWANY) jest subskrybentem neslettera podczas tej samej sesji klienta.
Shathish,
@ravisoni świetna odpowiedź !!! :)
jruzafa
czy możesz mi powiedzieć, is_subscribedw której tabeli zapisujesz, czy zapisuje się w sesji
ND17,
@ ND17 status subskrybenta newslettera jest przechowywany w `newsletter_subscriber`.`subscriber_status`. Pamiętaj, że nazwa tabeli może mieć prefiks w zależności od konfiguracji.
Darren Felton,
6

Musisz również sprawdzić status subskrypcji:

  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
źródło
Twoja odpowiedź powinna być zaakceptowana, pozostałe nie dbają o to, czy klient zostanie wypisany z subskrypcji lub oczekuje
Alex
4

Moim zdaniem żadna z powyższych odpowiedzi nie jest zbyt wygodna, ponieważ albo nie sprawdza, czy klient jest rzeczywiście subskrybowany, ani nie zajmuje się przypadkiem, w którym subskrypcja nie została znaleziona, więc oto:

$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.
źródło
dodałem ten kod do pliku observer.php, ale nie otrzymałem nic na temat subskrypcji lub nie.
Sarfaraj Sipai
2

Aby rozszerzyć odpowiedź @ Mufaddal:

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

W ten sposób sprawdzasz, czy rekord subskrypcji jest obecny ORAZ czy status subskrypcji jest prawdziwy.

Timon de Groot
źródło
1
jeśli używasz isSubscribe (), to nie wymaga użycia$subscriberModel->getId()
Amit Bera