Как проверить, если клиент уже подписан на информационный бюллетень
-
16-10-2019 - |
Вопрос
Мне нужно проверить, подписывается ли клиент на новостное письмо или нет. В настоящее время я использую этот код, и он ничего не возвращает:
if (Mage::getSingleton('customer/session')->isLoggedIn()) {
$status = Mage::getSingleton('customer/session')->getCustomer()->getIsSubscribed();
echo $status;
die();
}
Это ничего не дает. Есть идеи, как заставить это работать?
Решение
В качестве альтернативы вы можете попробовать это, если у вас есть адрес электронной почты клиента:
$subscriber = Mage::getModel('newsletter/subscriber')->loadByEmail($email);
if ($subscriber->getId()) {
// put your logic here...
}
Или если у вас есть идентификатор клиента, вы можете напрямую зарегистрироваться newsletter_subscriber
Таблица, чтобы проверить, существует ли идентификатор клиента или нет.
Другие советы
Вы должны проверить также статус подписки:
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;
}
}
По моему мнению, ни один из вышеперечисленных ответов не очень удобен тем, что они либо не проверяют, действительно ли клиент подписан, либо не обрабатывает случай, когда подписка не была найдена, поэтому здесь идет:
$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();
}
}
Чтобы расширить ответ @Mufaddal:
$subscriberModel = Mage::getModel('newsletter/subscriber')->loadByEmail($email);
$subbed = ($subscriberModel->isSubscribed() ? true : false);
Таким образом, вы проверяете, присутствует ли запись подписки, и верно ли статус подписки.