I want to have a filter to show push_ahead product in the respective category and a button to push_ahead and desactivate the push_ahead. But it's just display all the product of the category...
Here is my code :
<?php
class MyCompany_Tetegondole_Block_Adminhtml_Catalog_Category_Tab_Pushahead extends Mage_Adminhtml_Block_Catalog_Category_Tab_Product {
protected function _prepareCollection()
{
$collection = Mage::getModel('catalog/category')->load((int) $this->getRequest()->getParam('id', 0))->getProductCollection()
->addAttributeToSelect('name')
->addAttributeToSelect('sku')
->addAttributeToSelect('price');
$this->setCollection($collection);
if ($this->getCategory()->getProductsReadonly()) {
$this->getCollection()->addAttributeToFilter('push_ahead', true);
}
return Mage_Adminhtml_Block_Widget_Grid::_prepareCollection();
}
protected function _prepareColumns()
{
if (!$this->getCategory()->getProductsReadonly()) {
$this->addColumn('is_push', array(
'header_css_class' => 'a-center',
'type' => 'checkbox',
'name' => 'is_push',
'values' => $this->_getSelectedProducts(),
'align' => 'center',
'index' => 'entity_id'
));
}
$this->addColumn('entity_id', array(
'header' => Mage::helper('catalog')->__('ID'),
'sortable' => true,
'width' => '60',
'index' => 'entity_id'
));
$this->addColumn('name', array(
'header' => Mage::helper('catalog')->__('Name'),
'index' => 'name'
));
$this->addColumn('sku', array(
'header' => Mage::helper('catalog')->__('SKU'),
'width' => '80',
'index' => 'sku'
));
$this->addColumn('price', array(
'header' => Mage::helper('catalog')->__('Price'),
'type' => 'currency',
'width' => '1',
'currency_code' => (string) Mage::getStoreConfig(Mage_Directory_Model_Currency::XML_PATH_CURRENCY_BASE),
'index' => 'price'
));
return Mage_Adminhtml_Block_Widget_Grid::_prepareColumns();
}
protected function _addColumnFilterToCollection($column)
{
// Set custom filter for in category flag
if ($column->getId() == 'is_push') {
$productIds = $this->_getSelectedProducts();
Zend_Debug::dump($column);die;
if (empty($productIds)) {
$productIds = 0;
}
if ($column->getFilter()->getValue()) {
$this->getCollection()->addFieldToFilter('push_ahead', array('in'=>$productIds));
}
elseif(!empty($productIds)) {
$this->getCollection()->addFieldToFilter('push_ahead', array('nin'=>$productIds));
}
}
else {
return Mage_Adminhtml_Block_Widget_Grid::_addColumnFilterToCollection($column);
}
return $this;
}
protected function _getSelectedProducts()
{
$productIds = $this->getRequest()->getPost('is_push');
if (is_null($productIds)) {
$productIds = $this->getCategory()->getProductsPosition();
return array_keys($productIds);
}
return $productIds;
}
}
<?php
class MyCompany_Tetegondole_Block_Adminhtml_Catalog_Category_Tab extends Mage_Adminhtml_Block_Catalog_Category_Tabs{
/**
* Prepare Layout Content
*
* @return Mage_Adminhtml_Block_Catalog_Category_Tabs
*/
protected function _prepareLayout()
{
parent::_prepareLayout();
$this->addTab('pushahead', array(
'label' => Mage::helper('catalog')->__('Produits Mis en avant'),
'content' => $this->getLayout()->createBlock('tetegondole/adminhtml_catalog_category_tab_pushahead', 'category.pushahead')->toHtml(),
));
return $this;
}
}
$this->getCollection()->addAttributeToFilter('push_ahead', true);
is called? I see that you apply the filter only if$this->getCategory()->getProductsReadonly()
returns true. Does that return true?pusehd
is. But keep the questions separate. Add a new question explaining what you need