0

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’)); 

最後に、グループ ID が追加された /app/code/local/Mage/Customer/etc/config.xml の次の行:

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

何度かテストしましたが、すべての顧客がまだデフォルトの顧客グループとして追加されています。私が間違っていることがわかりますか?

4

2 に答える 2

0
<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
});

});

このスクリプトを js ファイルに追加します。

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

ブロックで \Magento\Customer\Model\ResourceModel\Group\Collection と上記のコードを使用します。

<div class="field group_id required">
        <label for="group_id" class="label"><span><?php echo __('Group') ?></span></label>
        <div class="control">
            <select name="group_id">
                <?php foreach ($groups as $key => $data) { 
                    ?>
                <option value="<?php 
                echo $data['value']; ?>"><?php echo $data['label']; ?></option>
                <?php }?>
            </select>
        </div>
    </div>

そして、phtml ファイルに上記のフィールドを追加します。私はそれが古い投稿であることを知っていますが、誰かがそれを必要とする場合に備えて解決策を提供します.

于 2018-08-17T04:59:19.160 に答える
-1

/app/code/local/Mage/Customer/controllers/AccountController.php を使用して独自のモジュールを作成します。モジュール名が Custom で名前空間が 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);

}

}

?>

これがうまくいくことを願っています。

于 2015-01-14T07:30:42.577 に答える