我有一个自定义模块,在customer_save_observer_executed
事件中调用,特别是当客户更新其帐户页面(名称,密码,电子邮件等)中的详细信息时,我添加了一个名为显示名称。Magento - 检查客户属性是否已存在
当客户提交此表单时,我需要检查display_name目前是否存在任何其他客户。如果没有,则setDisplayName(...)
否则什么都不做/显示错误消息。
我希望在这个片段中做到这一点:
$customer_check = Mage::getModel('customer/customer')
->getCollection()
->addAttributeToSelect('display_name')
->addAttributeToFilter('display_name',$new_name)->load();
if (is_object($customer_check) && count($customer_check) >= 2) {
// dont allow - duplicate customer displayname
}
else {
// allow update....
}
我当前的代码在型号 - > Observer.php
class xxxxxxx_Model_Observer
{
public function xxxxxxxx(Varien_Event_Observer $observer)
{
// to stop event being fired twice
if(Mage::registry('customer_save_observer_executed')){
return $this;
}
$postData = Mage::app()->getRequest()->getPost();
$customer = $observer->getCustomer();
// if updating NOT a new customer
if($customer instanceof Mage_Customer_Model_Customer && !$customer->isObjectNew()) {
// check display name is posted
if(!empty($postData['display_name'])){
$current_name = $customer->getDisplayName();
$new_name = $postData['display_name'];
// duplicate check
$customer_check = Mage::getModel('customer/customer')
->getCollection()
->addAttributeToSelect('display_name')
->addAttributeToFilter('display_name',$new_name)->load();
if (is_object($customer_check) && count($customer_check) >= 2) {
// dont allow - duplicate customer displayname
}
else {
if($postData['display_name'] !== $current_name) {
$customer->setDisplayName($postData['display_name']);
}
}
}
}
Mage::register('customer_save_observer_executed',true);
}
}
但这只是更新,即使我故意设置的DISPLAY_NAME到另一个客户的副本
UPDATE
进一步研究它看起来像模块函数本身没有运行或它里面没有任何东西正在影响,因为无论我把它放在哪里都不起作用。事实上,默认行为是将displayname设置为不是我的模块。我的模块被激活,我的配置文件使用customer_save_commit_after
事件如下图所示:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<xxx_xxxxx>
<version>0.0.1</version>
</xxx_xxxxx>
</modules>
<global>
<models>
<xxx_xxxxx>
<class>xxx_xxxxx_Model</class>
</xxx_xxxxx>
</models>
<events>
<customer_save_commit_after>
<observers>
<xxx_xxxxx>
<class>xxx_xxxxx/observer</class>
<method>xxxxxx</method>
<type>singleton</type>
</xxx_xxxxx>
</observers>
</customer_save_commit_after>
</events>
</global>
</config>
与“加密”是什么?什么可以隐藏?你可能有一个案例问题,你宣布你的模块(又名应用程序/ etc/modules/Xxx_Xxxxx.xml)? – OSdave 2014-10-03 12:59:37