问题
I am developing a website with magento ver-1.6. I am try to create new fields for customer registration, but it not created. I followed the same way what we followed in ver-1.5.
Any variation in create customer fields in 1.6?
回答1:
I don't know what you tried so I'm just going to list all the steps needed to add a new schooL customer attribute to the Magento 1.6.1 registration form.
Create a module preferably, or place similiar code to this in some .phtml file and run it once. If you're doing this proper and creating a module, put code like this into the mysql_install file:
<?php $installer = $this; $installer->startSetup(); $setup = Mage::getModel('customer/entity_setup', 'core_setup'); $setup->addAttribute('customer', 'school', array( 'type' => 'int', 'input' => 'select', 'label' => 'School', 'global' => 1, 'visible' => 1, 'required' => 0, 'user_defined' => 1, 'default' => '0', 'visible_on_front' => 1, 'source'=> 'profile/entity_school', )); if (version_compare(Mage::getVersion(), '1.6.0', '<=')) { $customer = Mage::getModel('customer/customer'); $attrSetId = $customer->getResource()->getEntityType()->getDefaultAttributeSetId(); $setup->addAttributeToSet('customer', $attrSetId, 'General', 'school'); } if (version_compare(Mage::getVersion(), '1.4.2', '>=')) { Mage::getSingleton('eav/config') ->getAttribute('customer', 'school') ->setData('used_in_forms', array('adminhtml_customer','customer_account_create','customer_account_edit','checkout_register')) ->save(); } $installer->endSetup(); ?>
In your module config.xml file. Note that the name of my module is Excellence_Profile.
<profile_setup> <!-- Replace with your module name --> <setup> <module>Excellence_Profile</module> <!-- Replace with your module name --> <class>Mage_Customer_Model_Entity_Setup</class> </setup> </profile_setup>
Here we will add our attribute, to the customer registration form. In version 1.6.0(+) the phtml file used is
persistance/customer/register.phtml
and in version 1.6.0(-) the phtml file used iscustomer/form/register.phtml
So we need to open the phtml file, based on magento version and add this code in the tag.<li> <?php $attribute = Mage::getModel('eav/config')->getAttribute('customer','school'); ?> <label for="school" class="<?php if($attribute->getIsRequired() == true){?>required<?php } ?>"><?php if($attribute->getIsRequired() == true){?><em>*</em><?php } ?><?php echo $this->__('School') ?></label> <div class="input-box"> <select name="school" id="school" class="<?php if($attribute->getIsRequired() == true){?>required-entry<?php } ?>"> <?php $options = $attribute->getSource()->getAllOptions(); foreach($options as $option){ ?> <option value='<?php echo $option['value']?>' <?php if($this->getFormData()->getSchool() == $option['value']){ echo 'selected="selected"';}?>><?php echo $this->__($option['label'])?></option> <?php } ?> </select> </div> </li>
For magento 1.4.2(+) that is all that is required for the registration step. If you create a user from here, you should see the school text field in admin. For magento 1.4.1(-), we need to do another thing open the your modules config.xml file and add:
<global> <fieldsets> <customer_account> <school><create>1</create><update>1</update><name>1</name></school> </customer_account> </fieldsets> </global>
Once, user has created his account in the MyAccount->Account Information section he should be able to edit the school field as well. For this open the phtml file
customer/form/edit.phtml
and put in the code in the :<?php <li> <?php $attribute = Mage::getModel('eav/config')->getAttribute('customer','school'); ?> <label for="is_active" class="<?php if($attribute->getIsRequired() == true){?>required<?php } ?>"><?php if($attribute->getIsRequired() == true){?><em>*</em><?php } ?><?php echo $this->__('School') ?></label> <div class="input-box"> <select name="school" id="school" class="<?php if($attribute->getIsRequired() == true){?>required-entry<?php } ?>"> <?php $options = $attribute->getSource()->getAllOptions(); foreach($options as $option){ ?> <option value='<?php echo $option['value']?>' <?php if($this->getCustomer()->getSchool() == $option['value']){ echo 'selected="selected"';}?>><?php echo $this->__($option['label'])?></option> <?php } ?> </select> </div> </li>
A registration form also shows up at the checkout page in magento. To add you field here, you need to edit
checkout/onepage/billing.phtml
for magento version 1.6(-) andpersistant/checkout/onepage/billing.phtml
for magento version 1.6(+) file and then find the code:<?php if(!$this->isCustomerLoggedIn()): ?>
inside this if condition add your field
<li> <li> <?php $attribute = Mage::getModel('eav/config')->getAttribute('customer','school'); ?> <label for="school" class="<?php if($attribute->getIsRequired() == true){?>required<?php } ?>"><?php if($attribute->getIsRequired() == true){?><em>*</em><?php } ?><?php echo $this->__('School') ?></label> <div class="input-box"> <select name="billing[school]" id="school" class="<?php if($attribute->getIsRequired() == true){?>required-entry<?php } ?>"> <?php $options = $attribute->getSource()->getAllOptions(); foreach($options as $option){ ?> <option value='<?php echo $option['value']?>'><?php echo $this->__($option['label'])?></option> <?php } ?> </select> </div> </li>
Next open your module config.xml or any other config.xml file, add the following lines:
<global> <fieldsets> <checkout_onepage_quote> <customer_school> <to_customer>school</to_customer> </customer_school> </checkout_onepage_quote> <customer_account> <school> <to_quote>customer_school</to_quote> </school> </customer_account> </fieldsets> </global>
Next we need to make some changes in the quote table i.e sales_flat_quote table in magento. If you have a module then create an upgrade version of your sql file and put in this code:
$tablequote = $this->getTable('sales/quote'); $installer->run(" ALTER TABLE $tablequote ADD `customer_school` INT NOT NULL ");
After doing this make sure to clear you magento cache, specifically “Flush Magento Cache” and “Flush Cache Storage”. Now when you place order, the customer is created with the correct school attribute.
回答2:
I had problems to save the new fields in the checkout_register form.
I had to extend the global->fieldsets node:
<global>
<fieldsets>
<checkout_onepage_quote>
<customer_school>
<to_customer>school</to_customer>
</customer_school>
</checkout_onepage_quote>
<checkout_onepage_billing>
<school>
<to_customer>*</to_customer>
</school>
</checkout_onepage_billing>
<customer_account>
<school>
<to_quote>customer_school</to_quote>
</school>
</customer_account>
<sales_convert_order>
<customer_school>
<to_quote>*</to_quote>
</customer_school>
</sales_convert_order>
</fieldsets>
</global>
来源:https://stackoverflow.com/questions/8426242/how-to-create-new-fields-for-customer