0

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;
}

}

3
  • Are you sure the line $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?
    – Marius
    May 7, 2015 at 7:55
  • It was only that... Thank's. Do you know can i add a button to push or dispush the product ?
    – felegento
    May 7, 2015 at 8:15
  • I don't because I don't understand what pusehd is. But keep the questions separate. Add a new question explaining what you need
    – Marius
    May 7, 2015 at 8:21

1 Answer 1

1

Based on the comments.... the filter for push_ahead is applied only when $this->getCategory()->getProductsReadonly() returns true.
Removing the if statement resolves the problem.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.