Magento 1.9: Как добавить определенную группу клиентов в раскрывающийся список в качестве атрибута продукта в admin
Я работаю над проектом, в котором я создал модуль для создания пользовательского клиента в группе клиентов производителя. Теперь я хочу добавить эту группу клиентов производителя в качестве атрибута продукта к продукту, чтобы при создании продукта от администратора должен быть выпадающий список из группы клиентов производителя, чтобы добавить производителя продукта.
1 answers
Напишите свою собственную исходную модель для атрибута продукта.
Напишите исходную модель
Это дочерний класс Mage_Eav_Model_Entity_Attribute_Source_Abstract
. Наиболее важным методом для реализации является getAllOptions()
, который возвращает возможные значения и метки для выпадающего списка:
public function getAllOptions()
{
if (is_null($this->_options)) {
$customers = $this->_getManufacturerCustomers();
$this->_options = [];
foreach ($customers as $customer) {
$this->_options[] = [
'label' => $customer->getName(),
'value' => $customer->getId(),
];
}
}
return $this->_options;
}
protected function _getManufacturerCustomers()
{
// take this value from configuration!
$manufacturerGroup = 123;
$customers = Mage::getResourceModel('customer/customer_collection');
$customers->addAttributeToFilter('group_id', $manufacturerGroup);
// add attributes you need to display the customer name
$customers->addAttributeToSelect(['firstname', 'middlename' 'lastname']);
return $customers;
}
Я написал _getManufactureCustomers()
в качестве черновика, корректируйте его по мере необходимости, но принцип должен быть ясен.
Используйте исходную модель
Допустим, атрибут продукта - manufacturer_customer
, а псевдоним исходной модели - stack_manufacturer/attribute_source_manufacturer
. Затем сценарий установки, добавляющий атрибут, выглядит следующим образом:
$installer->addAttribute('catalog_product', 'manufacturer_customer', array(
'label' => 'Manufacturer Customer',
'type' => 'int',
'input' => 'select',
'source' => 'stack_manufacturer/attribute_source_manufacturer',
// add more parameters as required
));
Плоский индекс
Если вы хотите, чтобы атрибут был включен в плоский индекс (потому что он нужен в коллекциях во внешнем интерфейсе), добавьте эти методы в исходную модель:
public function getFlatColums()
{
$columns = array(
$this->getAttribute()->getAttributeCode() => array(
'type' => 'int',
'unsigned' => false,
'is_null' => true,
'default' => null,
'extra' => null
)
);
return $columns;
}
public function getFlatUpdateSelect($store)
{
return Mage::getResourceModel('eav/entity_attribute')
->getFlatUpdateSelect($this->getAttribute(), $store);
}