php - create - magento 2 model
Filtro de cuadrĂcula de productos Magento con atributo personalizado (2)
Agregué un atributo personalizado a la cuadrícula de productos en el área de administración utilizando el siguiente código en /app/code/local/Mage/Adminhtml/Block/Catalog/Product/Grid.php en la función _prepareColumns ()
Funciona bien, pero ahora cuando se busca con cualquier filtro de búsqueda, la nueva columna de atributo no muestra ningún valor.
$attributeId = Mage::getResourceModel(''eav/entity_attribute'')->getIdByCode(''catalog_product'',''custom_column'');
$attribute = Mage::getModel(''catalog/resource_eav_attribute'')->load($attributeId);
$attributeData = $attribute->getData();
$frontEndLabel = $attributeData[''frontend_label''];
$attributeOptions = $attribute->getSource()->getAllOptions();
$attributeOptions2 = array();
foreach ($attributeOptions as $value) {
if(!empty($value[''value''])) {
$attributeOptions2[$value[''value'']] = $value[''label''];
}
}
$this->addColumn(''custom_column'',
array(
''header''=> Mage::helper(''catalog'')->__(''Custom Column''),
''width'' => ''150px'',
''index'' => ''custom_column'',
''type'' => ''options'',
''options'' => $attributeOptions2,
));
Y en _prepareCollection () agregué el siguiente código:
$collection = Mage::getModel(''catalog/product'')->getCollection()->addAttributeToSelect(''custom_column'');
Creo que es simple pero no lo estoy entendiendo en este momento, ¡cualquier ayuda es muy apreciada!
EDITAR:
Al buscar con filtros, la columna está rellenando con valores EXCEPTO si el filtro fue la columna Nombre.
Intentar agregar devolución de llamada personalizada del filtro
$this->addColumn(''custom_column'',
array(
''header''=> Mage::helper(''catalog'')->__(''Custom Column''),
''width'' => ''150px'',
''index'' => ''custom_column'',
''type'' => ''options'',
''options'' => $attributeOptions2,
''filter_condition_callback'' => array($this, ''filter_custom_column_callback''),
));
Y defina su consulta de filtro allí, como en este ejemplo:
protected function filter_custom_column_callback($collection, $column)
{
$filterValue = $column->getFilter()->getValue();
$collection->getSelect()->where(" ... ");
return $this;
}
Tuve que agregar lo siguiente a _prepareCollection
:
$collection->joinAttribute(
''custom_column'',
''catalog_product/custom_column'',
''entity_id'',
null,
''inner'',
$store->getId()
);