Intereting Posts
Получить следующую / предыдущую ISO-неделю и год в PHP Автоматически генерируемый порядковый номер, начиная с 001 (ТОЛЬКО ДЛЯ 3 ЦИФРОВ) – PHP / MYSQL Сохранение вывода openssl_random_pseudo_bytes в Postgres с использованием php? Я получаю сообщение об ошибке: неверная последовательность байтов для кодирования "UTF8" Удаленный доступ Xampp Как преобразовать xml в массив в php? Добавление в переменную среды $ PATH в скрипте PHP вставить массив в строку, разделенную запятыми, из запроса mysql Ошибка AJAX и 500 серверных ошибок Как сделать NAT с сокетами PHP Параметр прохождения Laravel от маршрута до фильтра Обновление живых данных (например, индикатор выполнения) с Laravel 4 PHP DOM получить nodevalue html? (без зачистки меток) Компиляция php с модулями vs с использованием общих модулей? Проблема с маршрутизацией Zend Framework 2 php – как открыть окно печати, когда файл pdf открывается на веб-странице?

Добавление атрибутов к объекту клиента

моя текущая цель – добавить новый атрибут клиента (с типом int ), который должен появиться как выбор с предопределенными параметрами (загружен из модели с записями, редактируемыми в бэкэнд, что и делается). Я изо всех сил стараюсь использовать метод $installer->addAttribute() , особенно указывая правильный вариант источника. Другая проблема заключается в том, что новый атрибут не сохраняется в таблице eav_entity_attribute

Я на Magento CE 1.5.1.0

Это код для базового атрибута int с помощью средства визуализации text :

 $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', 'your_attribute_code_here', array( 'input' => 'text', 'type' => 'int', 'label' => 'Some textual description', 'visible' => 1, 'required' => 0, 'user_defined' => 1, )); $setup->addAttributeToGroup( $entityTypeId, $attributeSetId, $attributeGroupId, 'your_attribute_code_here', '999' //sort_order ); $oAttribute = Mage::getSingleton('eav/config')->getAttribute('customer', 'your_attribute_code_here'); $oAttribute->setData('used_in_forms', array('adminhtml_customer')); $oAttribute->save(); $setup->endSetup(); 

Необычным шагом для добавления атрибутов является setData('used_in_forms') это кажется уникальным для атрибутов клиента. Без этого поле не будет отображаться, конечно же, не в adminhtml. Вы можете увидеть допустимые параметры для этого массива в таблице базы данных customer_form_attribute .

Что касается использования select с предопределенными параметрами, это то, что вам нужно:

 $iAttributeId = $installer->getAttributeId($entityTypeId, 'your_attribute_code_here'); $aClasses = array('TV','DVD','Home Theatre','Air Conditioner','Stereo/Hifi','Game Console','Camcorder','VCR','Set Top Box','PVR'); $aOption = array(); $aOption['attribute_id'] = $iAttributeId; for($iCount=0;$iCount<sizeof($aClasses);$iCount++){ $aOption['value']['option'.$iCount][0] = $aClasses[$iCount]; } $setup->addAttributeOption($aOption); 

И вот прохождение через пользовательский источник для раскрывающегося списка

Надеюсь это поможет,
JD

@ Ответ Джонатана Дэйна велик и очень помог мне. Однако – пока вы установили свой класс setup в Mage_Customer_Model_Entity_Setup , Magento может выполнить всю эту работу за вас:

 <!-- config.xml Example --> <?xml version="1.0"?> <config> <global> <resources> <acme_module_setup> <setup> <module>Acme_Module</module> <class>Mage_Customer_Model_Entity_Setup</class> </setup> <connection> <use>core_setup</use> </connection> </acme_module_setup> </resources> </global> </config> 

И вот mysql4-install-XXXphp :

 <?php $installer = $this; /* @var $installer Mage_Customer_Model_Entity_Setup */ $installer->startSetup(); $installer->addAttribute( 'customer', 'acme_imported', array( 'group' => 'Default', 'type' => 'int', 'label' => 'Imported into Acme', 'input' => 'select', 'source' => 'eav/entity_attribute_source_boolean', 'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE, 'required' => 0, 'default' => 0, 'visible_on_front' => 1, 'used_for_price_rules' => 0, 'adminhtml_only' => 1, ) ); $installer->endSetup(); 

В adminhtml_only выше adminhtml_only обрабатывается вся used_in_forms логика used_in_forms . Кроме того, определяющая group позаботится о назначении ее группе атрибутов.

Просто добавьте свой атрибут клиента под свой настраиваемый файл mysql для настраиваемого модуля через следующий скрипт.

 $installer = $this; $installer->startSetup(); $installer->addAttribute("customer", "yourattributename", array( "type" => "int", "backend" => "", "label" => "Bad Customer", "input" => "select", "source" => "eav/entity_attribute_source_boolean", "visible" => true, "required" => false, "default" => "", "frontend" => "", "unique" => false, "note" => "" )); $attribute = Mage::getSingleton("eav/config")->getAttribute("customer", "yourattributename"); 

Следующий сценарий, используемый для использования атрибута клиента

 $used_in_forms=array(); $used_in_forms[]="adminhtml_customer"; $attribute->setData("used_in_forms", $used_in_forms) ->setData("is_used_for_customer_segment", true) ->setData("is_system", 0) ->setData("is_user_defined", 1) ->setData("is_visible", 0) ->setData("sort_order", 100) ; $attribute->save(); $installer->endSetup(); 

Это сообщение в блоге имеет очень подробное объяснение модели Magento EAV с подробным описанием параметров полей и значений: http://www.solvingmagento.com/magento-eav-system/

Решение, предлагаемое alex и leek, работало для меня. Только мне нужно добавить функцию setter в наш AccountController.php

 $customer->setProfession($this->getRequest()->getPost('profession')) ->save(); // Added for updating Profession на $customer->setProfession($this->getRequest()->getPost('profession')) ->save(); // Added for updating Profession 

Где «профессия» была моим обычным атрибутом.