Я не знаю, что вы пытались сделать, поэтому я просто перечислю все шаги, необходимые для добавления нового атрибута клиента schooL в регистрационную форму Magento 1.6.1.
Желательно создать модуль или поместить подобный ему код в какой-нибудь файл .phtml и запустить его один раз. Если вы все делаете правильно и создаете модуль, поместите такой код в файл mysql_install:
<?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();
?>
В вашем файле config.xml модуля. Обратите внимание, что мой модуль называется 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>
Здесь мы добавим наш атрибут в форму регистрации клиента. В версии 1.6.0 (+) используется файл phtml persistance/customer/register.phtml
, а в версии 1.6.0 (-) используется файл phtml customer/form/register.phtml
Поэтому нам нужно открыть файл phtml, основанный на версии magento, и добавить этот код в тег.
<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>
Для magento 1.4.2 (+) это все, что требуется для этапа регистрации. Если вы создаете пользователя отсюда, вы должны увидеть школьное текстовое поле в admin.
Для magento 1.4.1 (-) нам нужно сделать еще одну вещь, открыть файл config.xml ваших модулей и добавить:
<global>
<fieldsets>
<customer_account>
<school><create>1</create><update>1</update><name>1</name></school>
</customer_account>
</fieldsets>
</global>
После того, как пользователь создал свою учетную запись в разделе MyAccount-> Информация об учетной записи, он также сможет редактировать школьное поле. Для этого откройте файл phtml customer/form/edit.phtml
и введите код в:
<?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>
Регистрационная форма также отображается на странице оформления заказа в magento. Чтобы добавить здесь свое поле, вам нужно отредактировать checkout/onepage/billing.phtml
для magento версии 1.6 (-) и persistant/checkout/onepage/billing.phtml
для magento версии 1.6 (+), а затем найти код:
<?php if(!$this->isCustomerLoggedIn()): ?>
внутри этого условия добавьте поле
<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>
Затем откройте ваш модуль config.xml или любой другой файл config.xml, добавьте следующие строки:
<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>
Далее нам нужно внести некоторые изменения в таблицу котировок, т.е. в таблицу sales_flat_quote в magento. Если у вас есть модуль, создайте обновленную версию файла sql и введите следующий код:
$tablequote = $this->getTable('sales/quote');
$installer->run("
ALTER TABLE $tablequote ADD `customer_school` INT NOT NULL
");
После этого обязательно очистите кэш magento, в частности, «Flush Magento Cache» и «Flush Cache Storage».
Теперь, когда вы размещаете заказ, клиент создается с правильным школьным атрибутом.