Magento 1.9: Как добавить определенную группу клиентов в раскрывающийся список в качестве атрибута продукта в admin


Я работаю над проектом, в котором я создал модуль для создания пользовательского клиента в группе клиентов производителя. Теперь я хочу добавить эту группу клиентов производителя в качестве атрибута продукта к продукту, чтобы при создании продукта от администратора должен быть выпадающий список из группы клиентов производителя, чтобы добавить производителя продукта.

Author: mudit mehrotra, 2016-09-07

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);
}
 2
Author: Fabian Schmengler, 2016-09-14 10:11:39