2012-07-26 70 views
0
$id = 'unique_id_block'; 
    $cmsBlockModel = Mage::getResourceModel('cms/block'); 
    $block = Mage::getModel('cms/block'); 

    $cmsBlockModel->load($block, $id); 

我有上面的代碼返回一個塊對象,其ID爲unique_id_block。獲取具有相同ID的magento塊的數組

這對於返回一個塊數組是如何實現的,因爲我可能有多個具有相同ID但具有不同存儲視圖的塊。

+0

此刻此僅返回1個對象,但實際上後端有2個 – WilfredMifsud 2012-07-26 09:54:06

回答

1

你可以得到所有的塊與使用集合相同標識符...

$id = 'unique_id_block'; 
$blockCollection = Mage::getModel('cms/block')->getCollection() 
    ->addFieldToFilter('identifier', $id); 

然後,您可以遍歷這個集合,你會做一個數組:

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

由於您的問題要求將這些作爲一個數組,但您也可以將集合轉換爲數組並獲取其中的項目,如下所示:

$id = 'unique_id_block'; 
$blockCollection = Mage::getModel('cms/block')->getCollection() 
    ->addFieldToFilter('identifier', $id) 
    ->toArray(); 

$blocks = $blockCollection['items']; 

但是除非有充分的理由,否則我會堅持第一個例子。

+0

直接調用getResourceModel來獲取集合是,IMO的一個壞習慣。由於模型可以指定它是集合對象而不是常規集合對象,因此最終可能會錯誤地認爲所有模型都必須使用相同的類名稱格式進行集合。一旦你這樣做,你就會因爲你的假設而面對錯誤。最好調用getModel()然後調用getCollection(),因爲這會正確地詢問模型什麼是正確的集合對象。 – 2012-07-26 23:18:37

+0

你是正確的,通過使用資源集合名稱的'collection',肯定有一個約定的假設 - 特別是在處理已知的核心類時,正如我們在這個問題中所做的那樣。無論如何 - 我已經爲你更新了答案:) – 2012-07-27 07:16:40

+0

基於原始問題要求塊數組,我建議使用getItems()而不是toArray(),因爲前者將返回塊對象數組,而後者也會把你的塊變成基本數組而不是對象。當然,在這種情況下,您可以將集合視爲迭代器,因爲它實現了IteratorAggregate和Countable。 – 2012-07-28 16:58:43