В течение двух дней я пытался добавить новый атрибут клиента в базу данных magento. Но это не работает. Я добавил простое поле ввода псевдонима в register.phtml и edit.phtml после этого урока:
http://www.magentocommerce.com/wiki/5_-_modules_and_development/customers_and_accounts/registration_fields
Вот неотъемлемое сообщение на форуме:
http://www.magentocommerce.com/boards/viewthread/9620/
Атрибут добавляется в таблицу базы данных eav_attribute , но значение не отображается в customer_entity_varchar .
Вот что у меня есть:
Все файлы находятся в app / code / local / Company /
Приложение / код / местные / Компания / Заказчик / и т.д. / config.xml
http://mysticpaste.com/view/9466 (следите за: <!-- nickname -->
)
app / code / local / Company / Customer / Model / Entity / Setup.php (обратите внимание: /* nickname */
)
http://mysticpaste.com/view/9467
class Company_Customer_Model_Entity_Setup extends Mage_Customer_Model_Entity_Setup{
public function getDefaultEntities()
{
return array(
'customer' => array(
'entity_model' =>'customer/customer',
'table' => 'customer/entity',
'increment_model' => 'eav/entity_increment_numeric',
'increment_per_store' => false,
'additional_attribute_table' => 'customer/eav_attribute',
'entity_attribute_collection' => 'customer/attribute_collection',
'attributes' => array(
// 'entity_id' => array('type'=>'static'),
// 'entity_type_id' => array('type'=>'static'),
// 'attribute_set_id' => array('type'=>'static'),
// 'increment_id' => array('type'=>'static'),
// 'created_at' => array('type'=>'static'),
// 'updated_at' => array('type'=>'static'),
// 'is_active' => array('type'=>'static'),
'website_id' => array(
'type' => 'static',
'label' => 'Associate to Website',
'input' => 'select',
'source' => 'customer/customer_attribute_source_website',
'backend' => 'customer/customer_attribute_backend_website',
'sort_order' => 10,
),
'store_id' => array(
'type' => 'static',
'label' => 'Create In',
'input' => 'select',
'source' => 'customer/customer_attribute_source_store',
'backend' => 'customer/customer_attribute_backend_store',
'visible' => false,
'sort_order' => 20,
),
'created_in' => array(
'type' => 'varchar',
'label' => 'Created From',
'sort_order' => 30,
),
'prefix' => array(
'label' => 'Prefix',
'required' => false,
'sort_order' => 37,
),
'firstname' => array(
'label' => 'First Name',
'sort_order' => 40,
),
'middlename' => array(
'label' => 'Middle Name/Initial',
'required' => false,
'sort_order' => 43,
),
'lastname' => array(
'label' => 'Last Name',
'sort_order' => 50,
),
'suffix' => array(
'label' => 'Suffix',
'required' => false,
'sort_order' => 53,
),
'email' => array(
'type' => 'static',
'label' => 'Email',
'class' => 'validate-email',
'sort_order' => 60,
), /* nickname */
'nickname' => array(
'label' => 'nickname',
'unique' => true,
'sort_order' => 65,
'required' => true,
),
'group_id' => array(
'type' => 'static',
'input' => 'select',
'label' => 'Group',
'source' => 'customer/customer_attribute_source_group',
'sort_order' => 70,
),
'dob' => array(
'type' => 'datetime',
'input' => 'date',
'backend' => 'eav/entity_attribute_backend_datetime',
'required' => false,
'label' => 'Date Of Birth',
'sort_order' => 80,
),
'password_hash' => array(
'input' => 'hidden',
'backend' => 'customer/customer_attribute_backend_password',
'required' => false,
),
'default_billing' => array(
'type' => 'int',
'visible' => false,
'required' => false,
'backend' => 'customer/customer_attribute_backend_billing',
),
'default_shipping' => array(
'type' => 'int',
'visible' => false,
'required' => false,
'backend' => 'customer/customer_attribute_backend_shipping',
),
'taxvat' => array(
'label' => 'Tax/VAT Number',
'visible' => true,
'required' => false,
),
'confirmation' => array(
'label' => 'Is Confirmed',
'visible' => false,
'required' => false,
),
'created_at' => array(
'type' => 'static',
'label' => 'Created At',
'visible' => false,
'required' => false,
'input' => 'date',
),
),
),
'customer_address'=>array(
'entity_model' =>'customer/customer_address',
'table' => 'customer/address_entity',
'additional_attribute_table' => 'customer/eav_attribute',
'entity_attribute_collection' => 'customer/address_attribute_collection',
'attributes' => array(
// 'entity_id' => array('type'=>'static'),
// 'entity_type_id' => array('type'=>'static'),
// 'attribute_set_id' => array('type'=>'static'),
// 'increment_id' => array('type'=>'static'),
// 'parent_id' => array('type'=>'static'),
// 'created_at' => array('type'=>'static'),
// 'updated_at' => array('type'=>'static'),
// 'is_active' => array('type'=>'static'),
'prefix' => array(
'label' => 'Prefix',
'required' => false,
'sort_order' => 7,
),
'firstname' => array(
'label' => 'First Name',
'sort_order' => 10,
),
'middlename' => array(
'label' => 'Middle Name/Initial',
'required' => false,
'sort_order' => 13,
),
'lastname' => array(
'label' => 'Last Name',
'sort_order' => 20,
),
'suffix' => array(
'label' => 'Suffix',
'required' => false,
'sort_order' => 23,
),
'company' => array(
'label' => 'Company',
'required' => false,
'sort_order' => 30,
),
'street' => array(
'type' => 'text',
'backend' => 'customer_entity/address_attribute_backend_street',
'input' => 'multiline',
'label' => 'Street Address',
'sort_order' => 40,
),
'city' => array(
'label' => 'City',
'sort_order' => 50,
),
'country_id' => array(
'type' => 'varchar',
'input' => 'select',
'label' => 'Country',
'class' => 'countries',
'source' => 'customer_entity/address_attribute_source_country',
'sort_order' => 60,
),
'region' => array(
'backend' => 'customer_entity/address_attribute_backend_region',
'label' => 'State/Province',
'class' => 'regions',
'sort_order' => 70,
),
'region_id' => array(
'type' => 'int',
'input' => 'hidden',
'source' => 'customer_entity/address_attribute_source_region',
'required' => 'false',
'sort_order' => 80,
'label' => 'State/Province'
),
'postcode' => array(
'label' => 'Zip/Postal Code',
'sort_order' => 90,
),
'telephone' => array(
'label' => 'Telephone',
'sort_order' => 100,
),
'fax' => array(
'label' => 'Fax',
'required' => false,
'sort_order' => 110,
),
),
),
);
}
}
приложение / дизайн / интерфейс / по умолчанию / компания / шаблон / клиент / форма / register.phtml
<label for="nickname" class="required" style="margin-left: -1px;"><em>*</em><?php echo $this->__('Nickname') ?></label>
<input type="text" name="nickname" id="nickname" value="<?php echo $this->htmlEscape($this->getFormData()->getnickname()) ?>" title="<?php echo $this->__('Nickname') ?>" class="input-text required-entry" />
я также запускаю этот фрагмент php-кода в верхней части register.phtml , чтобы добавить атрибут в eav_attribute
этот код был выполнен один раз:
<?php
$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
$AttrCode = 'nickname';
$settings = array (
'position' => 1,
'is_required' => 0
);
$setup->addAttribute('1', $AttrCode, $settings);
?>
приложение / дизайн / интерфейс / по умолчанию / компания / шаблон / клиент / форма / edit.phtml
<label for="nickname" class="required" style="margin-left: -1px;"><em>*</em><?php echo $this->__('Nickname') ?></label>
<input type="text" name="nickname" id="nickname" value="<?php echo $this->htmlEscape($this->getCustomer()->getnickname()) ?>" title="<?php echo $this->__('Nickname') ?>" class="input-text required-entry" />
Я также вручную очистил папку / var / cache , но безрезультатно.
Я понятия не имею, что еще я мог бы сделать, поэтому любая помощь очень приветствуется.
EDIT:
Хорошо, вот что я пробовал на корне magento:
define('MAGENTO', realpath(dirname(__FILE__)));
ini_set('memory_limit', '32M');
set_time_limit (0);
require_once MAGENTO . '/app/Mage.php';
Mage::app();
$installer = $this;
$installer->startSetup();
$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
$entityTypeId = $setup->getEntityTypeId('customer');
$attributeSetId = $setup->getDefaultAttributeSetId($entityTypeId);
$attributeGroupId = $setup->getDefaultAttributeGroupId($entityTypeId, $attributeSetId);
$setup->addAttribute('customer', 'nickname', array(
'input' => 'text',
'type' => 'text',
'label' => 'Nickname',
'visible' => 1,
'required' => 1,
'user_defined' => 1,
));
$setup->addAttributeToGroup(
$entityTypeId,
$attributeSetId,
$attributeGroupId,
'nickname',
'999' //sort_order
);
$oAttribute = Mage::getSingleton('eav/config')->getAttribute('customer', 'nickname');
$oAttribute->setData('used_in_forms', array('adminhtml_customer'));
$oAttribute->save();
$installer->endSetup();
Этот код будет выполнен нормально, и в таблице eav_attribute не будет добавлено сообщение об ошибке или что-то в этом роде.