将客户关联到可用的网站

时间:2014-02-12 07:12:03

标签: php magento

我在 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,因为抽象太多了。

有没有简单的方法可以做到这一点?

2 个答案:

答案 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>