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.