I am trying to make a group selection dropdown on the Magento customer registration page work. I have done all of the following:
Inserted the following code into 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>
Then the following in /app/code/local/Mage/Customer/controllers/AccountController.php in the createPostAction():
$customer->setGroupId($this->getRequest()->getPost('group_id'));
Finally the following in /app/code/local/Mage/Customer/etc/config.xml where group id was added:
<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>
I have tested it several times and every customer is still being added as the default customer group. Can you see what I am doing wrong?
Best Answer
Controller class definitions are not loaded via the autoloader. It's a common mistake to think that controller class definitions are subject to the same codepool load order as all of the other class types
So, the reason your code is not executing is because you have not implemented a proper controller rewrite mechanism. You'll need to add a directory under the
customer
frontname and create a proper class definition (and manually include the originalAccountController
); see https://stackoverflow.com/a/9350848/833795 for an exact implementation.Note that there is an intended API (classical sense) for this (ref customer attribute
used_in_forms
and related values; e.g.vat_id
).