我在 magento admin 中创建了3个网站,但目前他们没有不同的网址。
我想要做的是,在注册页面上,我为website
添加了一个字段,我以编程方式创建了一个选择框:
<select name="website">
<option value="">Please select...</option>
<?php
$websites = Mage::app()->getWebsites();
foreach ($websites as $web) {
echo "<option value='" . $web->getId() . "'>" .
$web->getName() . "</option>\n";
}
?>
</select>
现在,当用户提交此表单时,根据所选的website
,他需要与之关联。
为此,我已经覆盖了Customer/AccountController
的{{1}},但我想知道如何在createPostAction()
中分配此website id
,因为抽象太多了。
有没有简单的方法可以做到这一点?
答案 0 :(得分:1)
尝试命名您的选择website_id
而不是website
website_id
具有后端模型Mage_Customer_Model_Customer_Attribute_Backend_Website
,在保存客户实体时会调用该模型。{
因此,每次拨打$customer->save
时,都会将其称为
public function beforeSave($object)
{
if ($object->getId()) {
return $this;
}
if (!$object->hasData('website_id')) {
$object->setData('website_id', Mage::app()->getStore()->getWebsiteId());
}
return $this;
}
这意味着如果客户没有website_id,则会分配当前的网站ID。
答案 1 :(得分:0)
finally found this answer helpful。但是我在观察者身上做了一些改变,我需要让客户选择website id
。
以下是观察员的代码
public function setWebsiteId($object) {
//getting website_id from user selection
$webid = Mage::app()->getFrontController()->getRequest()
->getParam('website_id', Mage::app()->getStore()->getWebsiteId());
$customer = $object->getCustomer();
$customer->setWebsiteId($webid);
return $this;
}
需要处理的事件是:customer_register_success
<强>修订强>
上述代码工作正常,但上述实现的问题是,如果用户已经在当前网站注册,那么从当前网站,他将无法在其他网站注册。为了解决这个问题,我覆盖了Customer/AccountController
的{{1}}
createPostAction()
如果我没有执行此操作public function createPostAction() {
$post = $this->getRequest()->getPost();
if (isset($post['website_id'])) {
$webid = $this->getRequest()->getParam('website_id');
$customer = $this->_getCustomer();
$customer->setWebsiteId($webid);
Mage::register('current_customer', $customer); //this is the important line here
}
parent::createPostAction();
}
,那么父Mage::register('current_customer', $customer);
将再次获取客户对象createPostAction()
并丢失我之前设置的$customer = $this->_getCustomer();
。< / p>