オーバーライドclass My_CategoryFilters_Block_Adminhtml_Catalog_Category_Tab_Product extends Mage_Adminhtml_Block_Widget_Grid
して、列「visibility」を_prepareCollectionと_prepareColumnsに追加しました。フィルタリングしようとすると、グリッドが更新されません。
グリッドがMagentoのカスタム管理モジュールに表示されず、Magentoグリッドコンテナブロックがグリッドをロードしていないことを読みました。どちらも、過負荷のコントローラーを作成することを提案しました。もう少しMagentoの経験がある人は、私が欠けているものに光を当てることができますか?
前もって感謝します。
編集:コードから「レンダラー」と「コントローラー」を削除しました。
ツリーは次のようになります。
CategoryFilters
├── Block
│ └── Adminhtml
│ └── Catalog
│ └── Category
│ └── Tab
│ └── Product.php
├── Core
│ └── etc
│ └── config.xml
└── etc
そしてこれは私のコードです:
protected function _prepareCollection()
{
if ($this->getCategory()->getId()) {
$this->setDefaultFilter(array('in_category'=>1));
}
$store = $this->_getStore();
$collection = Mage::getModel('catalog/product')->getCollection()
->addAttributeToSelect('name')
->addAttributeToSelect('sku')
->addAttributeToSelect('price')
->addAttributeToSelect('store_id')
->addStoreFilter($this->getRequest()->getParam('store'))
->joinField('position',
'catalog/category_product',
'position',
'product_id=entity_id',
'category_id='.(int) $this->getRequest()->getParam('id', 0),
'left')
->joinAttribute('visibility', 'catalog_product/visibility', 'entity_id', null, 'inner', $store->getId());
;
$this->setCollection($collection);
$this->getCollection()->addWebsiteNamesToResult();
if ($this->getCategory()->getProductsReadonly()) {
$productIds = $this->_getSelectedProducts();
if (empty($productIds)) {
$productIds = 0;
}
$this->getCollection()->addFieldToFilter('entity_id', array('in'=>$productIds));
}
return parent::_prepareCollection();
}
protected function _prepareColumns()
{
$this->addColumn('visibility', array(
'header' => Mage::helper('catalog')->__('Visibility'),
'width' => '100',
'sortable' => false,
'index' => 'visibility',
'type' => 'options',
'options' => Mage::getModel('catalog/product_visibility')->getOptionArray(),
#'renderer' => new Rogue_CategoryFilters_Block_Adminhtml_Renderer_Visibility()
));
}