Cómo verificar si el cliente ya está suscrito al boletín

14

Necesito verificar si el cliente está suscrito a una carta de noticias o no. Actualmente estoy usando este código y no devuelve nada:

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

Esto no está dando nada. ¿Alguna idea de cómo hacer que esto funcione?

ravisoni
fuente

Respuestas:

21

Alternativamente, puede intentar esto, si tiene la dirección de correo electrónico del cliente:

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

O si tiene una identificación de cliente, puede verificar directamente en la newsletter_subscribertabla para verificar si existe o no.

Mufaddal
fuente
3
utilicé este código. $ email = Mage :: getSingleton ('cliente / sesión') -> getCustomer () -> getEmail (); $ suscriptor = Mage :: getModel ('boletín / suscriptor') -> loadByEmail ($ correo electrónico); $ status = $ suscriptor-> isSubscriptions ();
ravisoni
¿Cómo puedo comprobar si un cliente invitado (cliente NO INICIADO SESIÓN) se ha suscrito a nesletter, en la misma sesión de cliente.
Shathish
@ravisoni gran respuesta !!! :)
jruzafa
¿Me puede decir is_subscribeden qué tabla guardar o guardar en sesión
ND17
@ ND17 se almacena el estado de un suscriptor del boletín `newsletter_subscriber`.`subscriber_status`. Tenga en cuenta que el nombre de la tabla puede tener un prefijo dependiendo de su configuración.
Darren Felton el
6

También debe verificar el estado de la suscripción:

  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
fuente
Su respuesta debe ser la aceptada, a los demás no les importa si el cliente está anulado o pendiente de suscripción
Alex
4

En mi opinión, ninguna de las respuestas anteriores es muy conveniente porque no comprueban si el cliente está realmente suscrito o no manejan el caso donde no se ha encontrado una suscripción, así que aquí va:

$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.
fuente
He agregado este código en el archivo observer.php pero no obtengo nada sobre suscribirse o no.
Sarfaraj Sipai
2

Para extender la respuesta de @ Mufaddal:

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

De esta manera, verifica si el registro de suscripción está presente Y si el estado de la suscripción es verdadero.

Timon de Groot
fuente
1
si usa isSubscriptions (), entonces no es necesario usarlo$subscriberModel->getId()
Amit Bera