Alan と Vitaly によって提案されたソリューションのいくつかの要素を、私自身の厄介な理解と融合させて、次のコードで必要なことを達成しました。
状況を説明するために、ストア管理者が他のストアに影響を与える可能性のある CMS ページと静的ブロックを表示または編集できないように、Aitoc パーミッション モジュールを拡張していました。これには、グリッドからのそれらのアイテムのフィルタリングが含まれていました。
$collection = Mage::getModel('cms/page')->getCollection();
$collection->addStoreFilter(Mage::helper('aitpermissions')->getStoreIds());
$conn = Mage::getSingleton('core/resource')->getConnection('core_read');
$page_ids = array();
foreach($collection as $key=>$item) {
$page_id = $item->getId();
$results = $conn->fetchAll("SELECT * FROM cms_page_store
WHERE page_id = ".$page_id.";");
$count = 0;
$arr_stores = array();
foreach($results as $row) {
$arr_stores[] = $row['store_id'];
$count++;
}
//We dont want to show the item if any of the following are true:
//The store id = 0 (Means its assigned to All Stores)
//There is more than one store assigned to this CMS page
if( in_array('0',$arr_stores) || $count>1) {
//This removes results from the grid (but oddly not the paging)
$collection->removeItemByKey($key);
}
else {
//build an array which we will use to remove results from the paging
$page_ids[] = $page_id;
}
}
//This removes results from paging (but not the grid)
$collection->addFieldToFilter('page_id',array('in'=>$page_ids));
ページングとグリッドからフィルター処理するために 2 つの異なる方法を使用する必要があった理由がわかりません。このサイトは magento 1.5 を使用しているため、それに関連する問題がある可能性があります。
いずれにせよ、この解決策は私にとってはうまくいきました。