Magento-can';t在事件发生前,将更改的客户组ID与新闻稿的观察者保存\u订户保存\u
我为Magento-can';t在事件发生前,将更改的客户组ID与新闻稿的观察者保存\u订户保存\u,magento,events,observers,Magento,Events,Observers,我为时事通讯\u订户\u事件前保存\u创建了一个观察者当客户订阅/取消订阅时事通讯时,会触发此操作。 我需要相应地更改此客户组ID。似乎我可以更改GroupId,但我无法保存它。如果我在代码中调用$customer->save()-方法,我会遇到一个无限循环;如果我在事件之后尝试连接到时事通讯\u订户\u保存\u,也会发生同样的情况 有人能帮我吗?非常感谢 下面是我在Observer.php中的代码: public function newsletter_subscriber_change($o
时事通讯\u订户\u事件前保存\u创建了一个观察者代码>当客户订阅/取消订阅时事通讯时,会触发此操作。
我需要相应地更改此客户组ID。似乎我可以更改GroupId,但我无法保存它。如果我在代码中调用$customer->save()
-方法,我会遇到一个无限循环;如果我在
事件之后尝试连接到时事通讯\u订户\u保存\u,也会发生同样的情况
有人能帮我吗?非常感谢
下面是我在Observer.php中的代码:
public function newsletter_subscriber_change($observer) {
try {
// get status of subscriber
$subscriber = $observer->getEvent()->getSubscriber();
$status = $subscriber->getStatus();
$email = $subscriber->getEmail();
$customer = Mage::getSingleton('customer/customer');
$customer->setWebsiteId(Mage::app()->getWebsite()->getId());
$customer->loadByEmail($email);
// here i change the groupId
$customer->setData( 'group_id', 9 );
// if i check the group here, the change applied ...
$customer_group = $customer->getGroupId();
// i tried saving with following, but run into loop
$customer->save();
} catch (Exception $e) {
Mage::log("newsletter_subscriber_change observer failed: " . $e->getMessage());
}
}
您得到了无限循环,因为Mage_新闻稿还捕获了customer_save_,在事件之后保存订阅数据。
您可以通过以下原始查询更新组id:
public function newsletter_subscriber_change($observer) {
try {
// get status of subscriber
$subscriber = $observer->getEvent()->getSubscriber();
$status = $subscriber->getStatus();
$email = $subscriber->getEmail();
$customer = Mage::getSingleton('customer/customer');
$customer->setWebsiteId(Mage::app()->getWebsite()->getId());
$customer->loadByEmail($email);
$adapter = Mage::getSingleton('core/resource');
/* @var $conn Varien_Db_Adapter_Interface */
$conn = $adapter->getConnection('core_write');
$update = 'UPDATE ' . $customer->getResource()->getTable('customer/customer_enity')
. ' SET group_id = ? WHERE entity_id = ?';
$conn->query($update, array(9, $customer->getId()));
} catch (Exception $e) {
Mage::log("newsletter_subscriber_change observer failed: " . $e->getMessage());
}
}
尝试执行$customer->setIsSubscribed(true)->save()代码>-啊,那不行,没关系,srythanks ndlinh,你的解决方案适合我。但是,据我所知:我做了更多的尝试,如果我通过template/newsletter/subscribe.phtml在前端订阅新闻稿(与登录的客户一起),则不会触发事件后的客户保存。只有当我在template/customer/form/newsletter.phtml中订阅时事通讯时,它才会被解雇。因此,我不明白为什么我在第一种情况下得到这个循环,或者为什么我不能直接(没有原始查询)访问和修改客户组id。正如我上面所说的,您可以在事件之前捕获时事通讯\u订户\u保存\u来更改客户组。Mage_时事通讯模块还可以在
之后捕获客户以保存订户。在您的时事通讯\u订户\u change
方法中,您可以调用$customer->save()
,它将在事件发生后触发customer\u save\u,然后Mage\u Newsletter处理此事件并保存订户,Mage\u Newsletter将在事件发生前触发Newsletter\u subscriber\u save\u,然后您的模块捕获此事件,然后调用$customer->save()
,它将在
之后再次启动customer\u save\u,然后它将进入无限循环。谢谢您的解释,现在我知道了。我想得不对。