我需要检查客户是否已订阅新闻信。目前,我正在使用此代码,它没有返回:

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

或者,如果您有客户ID,则可以直接检查 newsletter_subscriber 表以检查客户ID是否存在。

其他提示

您还必须检查订阅状态:

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

这样,您检查是否存在订阅记录以及订阅状态是否为真。

许可以下: CC-BY-SA归因
scroll top