¿Hay una manera de comprobar si un cliente invitado ha suscrito al boletín de noticias, en esa sesión en particular?
-
16-10-2019 - |
Pregunta
Tengo que ocultar el formulario de suscripción al boletín de clientes que han suscrito.
Para registrado y loggedin cliente soy capaz de comprobar el estado de la suscripción utilizando el método siguiente:
$customerSession = Mage::getSingleton("customer/session");
$email = $customerSession->getCustomer()->getEmail();
$subscriber = Mage::getModel('newsletter/subscriber')->loadByEmail($email);
$status = $subscriber->isSubscribed(); // status = 1 if subscribed.
Pero quiero ocultarlo para los clientes de invitados también (obviamente para esa sesión en particular solo).
¿Cómo podría hacer eso? ¿Alguien puede ayudar?
Solución
Su config.xml:
<config>
<frontend>
<events>
<newsletter_subscriber_save_after>
<observers>
<your_module_node>
<class>Your_Module_Model_Observer</class>
<method>newsletterSubscriberSaveAfter</method>
</your_module_node>
</observers>
</newsletter_subscriber_save_after>
</events>
</frontend>
/*another config nodes*/
</config>
Su Observer.php:
public function newsletterSubscriberSaveAfter($observer)
{
$subscription = $observer->getEvent()->getSubscriber();
if ($subscription->subscriber_email) {
Mage::getSingleton('customer/session')->setSubscribed(true);
}
}
Plantilla /app/design/frontend/base/default/template/newsletter/subscribe.phtml:
<?php if (!Mage::getSingleton('customer/session')->getSubscribed()): ?>
<!--here is original html -->
<?php endif; ?>
Otros consejos
Anular la Mage_Newsletter_SubscriberController
controlador de abonado y en el método newAction()
, cuando el cliente se suscribe simplemente añadir una indicación a la sesión.
Luego, en la plantilla de bloque de noticias, simplemente comprobar si se ha establecido que la bandera de la sesión.