form create collection php magento filter grid admin

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() );