获取具有相同id的块数组magento

获取具有相同id的块数组magento,magento,Magento,我有上面的代码返回一个id为unique\u id\u block的块对象 由于我可能有多个具有相同ID但具有不同存储视图的块,因此如何才能返回块数组。您可以使用集合获取具有相同标识符的所有块 $id = 'unique_id_block'; $cmsBlockModel = Mage::getResourceModel('cms/block'); $block = Mage::getModel('cms/block'); $cmsBlockModel->load

我有上面的代码返回一个id为unique\u id\u block的块对象


由于我可能有多个具有相同ID但具有不同存储视图的块,因此如何才能返回块数组。

您可以使用集合获取具有相同标识符的所有块

$id = 'unique_id_block';
    $cmsBlockModel = Mage::getResourceModel('cms/block');
    $block = Mage::getModel('cms/block');

    $cmsBlockModel->load($block, $id);
然后,您可以像处理数组一样迭代此集合:

$id = 'unique_id_block';
$blockCollection = Mage::getModel('cms/block')->getCollection()
    ->addFieldToFilter('identifier', $id);
由于您的问题要求将这些项作为数组,因此您也可以将集合转换为数组并获取其项,如下所示:

foreach ($blockCollection as $block) {
  //...
}

但是,除非有充分的理由,否则我将坚持第一个示例。

目前,这只返回1个对象,但实际上后端中有2个直接调用getResourceModel来获取集合,依我看,这是一个坏习惯。由于模型可以指定其集合对象而不是使用传统的集合对象,因此最终可能会错误地假设所有模型都必须使用相同的集合类名格式。一旦你这么做了,你就会因为你的假设而暴露出错误。最好先调用getModel(),然后调用getCollection(),因为这样会正确地询问模型正确的集合对象应该是什么。您是正确的,通过使用“collection”作为资源集合名称,肯定有一个约定的假设,特别是在处理已知的核心类时,就像我们在这个问题中所做的那样。尽管如此-我已经为您更新了答案:)基于最初询问块数组的问题,我建议使用getItems()而不是toArray(),因为前者将返回块对象数组,而后者也会将块转换为基本数组而不是对象。当然,在这种情况下,您可以将集合视为迭代器,因为它实现了IteratorAggregate和Countable。
$id = 'unique_id_block';
$blockCollection = Mage::getModel('cms/block')->getCollection()
    ->addFieldToFilter('identifier', $id)
    ->toArray();

$blocks = $blockCollection['items'];