Magento CMS Block Collection,无法按商店ID过滤 - addStoreFilter([storeid])无效

时间:2014-01-30 13:20:14

标签: php collections magento

如何过滤cms / block(静态块)集合?

这适用于cms页面:

$model = Mage::getModel('cms/page');
$collection = $model->getCollection()->addStoreFilter(3);

这不起作用(返回未过滤的集合):

$model = Mage::getModel('cms/block');
$collection = $model->getCollection()->addStoreFilter(3);

我也尝试使用资源模型'cms / block'和'cms / block_collection',没有结果。

为什么Magento不合适?!有时我真的开始讨厌Magento了。 请帮忙。

4 个答案:

答案 0 :(得分:5)

你对未经过滤的意思是什么?

addStoreFilter还有第二个参数来包含管理存储

addStoreFilter($store, $withAdmin = true)

因此,如果您有任何链接到所有商店的静态块,这些也将存在于您的收藏中。

这是你的问题吗?

答案 1 :(得分:4)

试试这段代码:

$collection = Mage::getModel('cms/block')->getCollection();
$select = $collection->getSelect()->join(
    array('block_store' => $collection->getTable('cms/block_store')),
    'main_table.block_id = block_store.block_id',
    array('store_id')
)->where('block_store.store_id IN (?)', array(8));
foreach ($collection as $block) {
   // here you can use $block 
}

您可以对cms/page执行相同的操作。只需改变

cms/block - > cms/pagecms/block_store - > cms/page_store

答案 2 :(得分:0)

好的,首先要感谢Mike和oleksii.scarychevskyi。 这两个答案都帮我搞定了。 使用它完美地工作,我更喜欢这个:

$collection = Mage::getModel('cms/block')->getCollection()->addStoreFilter(3, false);

oleksiis解决方案也有效,我不知道我们可以通过这种方式改变选择。

答案 3 :(得分:0)

这对我来说可以通过标识符获取静态块:

$storeId = 2;
$content = Mage::getModel('cms/block')->setStoreId($storeId)->load('aboutus')->getContent();
echo  $content;