It appears the Magento developers didn’t think this one through enitrely as this to me is something that should be there by standard. Not everyone has a multi-website set up and products that span two stores, yet that’s the very reason this kind of thing can be a pain to add on not just here but also in the main catalog view and in other views like reports.
I am detailing this by editing core files, this is not the correct way and should be added via a module or local override, which in this case would be very little extra work, but in essence the steps you need to take are modifying/overriding
Mage_Adminhtml_Block_Catalog_Category_Tab_Product
First find the function
_addColumnFilterToCollection
Add the following if statement at the top, this is checking for our column which we later add and looking up the website ID’s
if ($column->getId() == 'website_id') { $this->getCollection()->joinField('websites', 'catalog/product_website', 'website_id', 'product_id=entity_id', null, 'left'); return parent::_addColumnFilterToCollection($column); }
At the bottom of the function you need to modify the lines like so, to bring in the website names.
parent::_prepareCollection(); $this->getCollection()->addWebsiteNamesToResult(); return $this;
Next add a new function directly underneath the above, this is a custom column callback for our new column which we add next, which is simply a way of adding more criteria onto our $collection, in this case we add the store filter.
protected function _websiteFilter($collection, $column) { if (!$value = $column->getFilter()->getValue()) { return $this; } $store = Mage::app()->getWebsite($value); $collection->addStoreFilter($value); return $this; }
Finally add the website column, with our custom filter callback
if (!Mage::app()->isSingleStoreMode()) { $this->addColumn('websites', array( 'header'=> Mage::helper('catalog')->__('Websites'), 'width' => '100px', 'sortable' => false, 'index' => 'websites', 'type' => 'options', 'options' => Mage::getModel('core/website')->getCollection()->toOptionHash(), 'filter_condition_callback' => array($this, '_websiteFilter'), )); }
And you’re done.
No comments:
Post a Comment