Magento下拉组选择客户注册

时间:2013-04-18 05:00:49

标签: php xml magento magento-1.7

我正在尝试在Magento客户注册页面上进行组选择下拉列表工作。我已经完成了以下所有工作:

将以下代码插入template / persistent / customer / form / register.phtml:

<label for="group_id" style='margin-top:15px;'><?php echo $this->__('Which group do you belong to? (select "Pet Owner" if you are uncertain)') ?><span class="required">*</span></label>
            <div style='clear:both'><p style='color:red;'>Note: DVM/DACVO and Institution accounts require administrative approval.</p></div>
            <div class="input-box" style='margin-bottom:10px;'>
                    <select style='border:1px solid gray;' name="group_id" id="group_id" title="<?php echo $this->__('Group') ?>" class="validate-group required-entry input-text" />
                        <?php $groups = Mage::helper('customer')->getGroups()->toOptionArray(); ?>
                        <?php foreach($groups as $group){ ?>
                            <?php if ($group['label']=="Pet Owner" || $group['label']=="DVM / DACVO" || $group['label']=="Institution"){?>
                                <option value="<?php print $group['value'] ?>"><?php print $group['label'] ?></option>
                            <?php } ?>
                        <?php } ?>
                    </select>
                    </div>

然后在createPostAction()中的/app/code/local/Mage/Customer/controllers/AccountController.php中进行以下操作:

$customer->setGroupId($this->getRequest()->getPost(‘group_id’)); 

最后在/app/code/local/Mage/Customer/etc/config.xml中添加了组ID:

  <fieldsets>
            <customer_account>
                <prefix>
                    <create>1</create>
                    <update>1</update>
                    <name>1</name>
                </prefix>
                <firstname>
                    <create>1</create>
                    <update>1</update>
                    <name>1</name>
                </firstname>
                <middlename>
                    <create>1</create>
                    <update>1</update>
                    <name>1</name>
                </middlename>
                <lastname>
                    <create>1</create>
                    <update>1</update>
                    <name>1</name>
                </lastname>
                <suffix>
                    <create>1</create>
                    <update>1</update>
                    <name>1</name>
                </suffix>
                <email>
                    <create>1</create>
                    <update>1</update>
                </email>
                <password>
                    <create>1</create>
                </password>
                <confirmation>
                    <create>1</create>
                </confirmation>
                <dob>
                    <create>1</create>
                    <update>1</update>
                </dob>
                <group_id><create>1</create><update>1</update></group_id>
                <taxvat>
                    <create>1</create>
                    <update>1</update>
                </taxvat>
                <gender>
                    <create>1</create>
                    <update>1</update>
                </gender>
            </customer_account>

我已经多次测试过,每个客户仍然被添加为默认客户群。你能看出我做错了吗?

2 个答案:

答案 0 :(得分:0)

> node ./node_modules/mocha/bin/mocha test/lifecycle.test.js test/integration/**/*.test.js


√ OtherModel method() should do something: 17ms
1) User find() should return an array of users
'Done.'
PS C:\repos\myproject>

});

将此脚本添加到您的js文件中。

<script type="text/javascript">
$(document).on('change','#country',function() {
var param = 'country='+$('#country').val();
$.ajax({
    showLoader: true,
    url: YOUR_URL_HERE,
    data: param,
    type: "GET",
    dataType: 'json'
}).done(function (data) {
    //data.value has the array of regions
});

在块中使用\ Magento \ Customer \ Model \ ResourceModel \ Group \ Collection和以上代码。

public function getCountries()
{
    $country = $this->directoryBlock->getCountryHtmlSelect();
    return $country;
}

然后在phtml文件中添加以上字段。 我知道这是一篇过时的文章,但是请提供解决方案以防万一有人需要。

答案 1 :(得分:-1)

使用/app/code/local/Mage/Customer/controllers/AccountController.php创建自己的模块实例。如果模块名称为Custom和namespace Mymodule,请在congig.xml中添加以下代码。

<global>
    <fieldsets>
        <customer_account>
            <group_id><create>1</create><update>1</update></group_id>
        </customer_account>
    </fieldsets>
</global>
<frontend>  
<routers>
 <customer>
    <args>
        <modules>
            <Mymodule_Custom before="Mage_Customer_AccountController">Mymodule_Custom</Mymodule_Custom>
        </modules>
    </args>
  </customer>
</routers>

这将覆盖您的AccountController。现在找到控制器的以下代码。

<?php 

require_once(Mage::getModuleDir('controllers','Mage_Customer').DS.'AccountController.php');
class Mymodule_Custom_AccountController extends Mage_Customer_AccountController
{
public function createPostAction()
{
$session = $this->_getSession();
    if ($session->isLoggedIn()) {
        $this->_redirect('*/*/');
        return;
    }
    $session->setEscapeMessages(true); // prevent XSS injection in user input
    if (!$this->getRequest()->isPost()) {
        $errUrl = $this->_getUrl('*/*/create', array('_secure' => true));
        $this->_redirectError($errUrl);
        return;
    }

    $customer = $this->_getCustomer();

    try {
        $errors = $this->_getCustomerErrors($customer);

        if (empty($errors)) {
            if($this->getRequest()->getPost('group_id')){ 
            $customer->setGroupId($this->getRequest()->getPost('group_id'));
            } else {
                $customer->getGroupId(); 
            }
            $customer->cleanPasswordsValidationData();
            $customer->save();
            $this->_dispatchRegisterSuccess($customer);
            $this->_successProcessRegistration($customer);
            return;
        } else {
            $this->_addSessionError($errors);
        }
    } catch (Mage_Core_Exception $e) {
        $session->setCustomerFormData($this->getRequest()->getPost());
        if ($e->getCode() === Mage_Customer_Model_Customer::EXCEPTION_EMAIL_EXISTS) {
            $url = $this->_getUrl('customer/account/forgotpassword');
            $message = $this->__('There is already an account with this email address. If you are sure that it is your email address, <a href="%s">click here</a> to get your password and access your account.', $url);
            $session->setEscapeMessages(false);
        } else {
            $message = $e->getMessage();
        }
        $session->addError($message);
    } catch (Exception $e) {
        $session->setCustomerFormData($this->getRequest()->getPost())
            ->addException($e, $this->__('Cannot save the customer.'));
    }
    $errUrl = $this->_getUrl('*/*/create', array('_secure' => true));
    $this->_redirectError($errUrl);

}

}

?>

希望这对你有用。