【问题标题】:Magento CMS Block Collection, can't filter by store id - addStoreFilter([storeid]) not workingMagento CMS Block Collection,无法按商店 ID 过滤 - addStoreFilter([storeid]) 不起作用
【发布时间】:2014-02-22 19:49:56
【问题描述】:

如何过滤 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。 请帮忙。

【问题讨论】:

    标签: php collections magento


    【解决方案1】:

    您对未过滤的确切含义是什么?

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

    addStoreFilter($store, $withAdmin = true)
    

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

    这是你的问题吗?

    【讨论】:

    • 这可能是问题所在,是的。
    • 当我用 addStoreFilter(3, false) 尝试它时,我没有得到任何块。但肯定有与商店“3”相关的块。
    • cms_block_store是否也反映了这一点?
    • 对不起,我的代码中还有一个愚蠢的问题,你的解决方案很好
    • 如果我尝试这个$cms_blocks = Mage::getModel('cms/block')->getCollection()->addFieldToFilter('identifier', array('eq' => 'block_slide1'))->addStoreFilter($storeId, false) 并打印查询,我有:SELECT 'main_table'.* FROM 'cms_block' AS 'main_table' WHERE ('identifier' = 'block_slide1') 它没有添加商店过滤器。为什么?
    【解决方案2】:

    试试这个代码:

    $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

    【讨论】:

    • 但这不会返回块的集合。怎么继续?
    【解决方案3】:

    好的,首先感谢 Mike 和 oleksii.scarychevskyi。 这两个答案都帮助我让它工作。 使用这个效果很好,我更喜欢这个:

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

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

    【讨论】:

    • 你用的是什么版本?我不明白我的问题(我使用的是 1.9.2.4 版本);如果我打印加载集合的查询($collection = Mage::getModel('cms/block')->getCollection()->addStoreFilter(3, false);),我会得到这个日志:SELECT 'main_table'.* FROM 'cms_block' AS 'main_table' without store filter
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多