2012-11-30 116 views
0

我試圖添加一些項目到自定義創建的集合。閱讀Alan Storm varien data collection和這SO question我得到了幾個不同的選擇。Magento,添加到自定義集合

下面是使用Varien_Data_Collection一個選項:

$myResultCollection = new Varien_Data_Collection(); 
    $mybanner = new Varien_Object(); 
    foreach($myBannersCollection as $banner){ 
     $mybanner = $banner; 
     $search_text = explode(",", $banner->getsearch_text()); 
     foreach ($search_text as $txt){ 
      if (stripos($currentProdName,$txt) !== false) { 
       $myResultCollection->addItem($mybanner); 
      } 
     } 
    } 

此代碼引發以下錯誤:

Item (Dts_Banners_Model_Bannersadmin) with the same id "10" already exist 

這裏是代碼的另一個變化,用我的自定義集合從模型我現在使用:

$myResultCollection = Mage::getModel('banners/bannersadmin'); 
    foreach($myBannersCollection as $banner){ 
     $search_text = explode(",", $banner->getsearch_text()); 
     foreach ($search_text as $txt){ 
      if (stripos($currentProdName,$txt) !== false) { 
       $myResultCollection->addItem($banner); 
      } 
     } 
    } 

但是,這一個顯示以下錯誤(不sh由於一切,是長的方式):

Invalid method Dts_Banners_Model_Bannersadmin::addItem(Array 
(
    [0] => Dts_Banners_Model_Bannersadmin Object 
     (
      [_eventPrefix:protected] => core_abstract 
      [_eventObject:protected] => object 
      [_resourceName:protected] => banners/bannersadmin 
      [_resource:protected] => 
      [_resourceCollectionName:protected] => banners/bannersadmin_collection 
      [_cacheTag:protected] => 
      [_dataSaveAllowed:protected] => 1 
      [_isObjectNew:protected] => 
      ....... 

我做錯了什麼?

回答

2

問題1:正在添加到Varien_Data_Collection實例的項目需要在集合的上下文中具有不同的ID。

問題2:Dts_Banners_Model_Bannersadmin不是Varien_Data_Collection的實例。

+0

第二個。在Magento中,並不是所有的集合都從基本的Varien_Data_Collection「繼承」? – Yaroslav

+1

所有典型的Magento集合都使用'Varien_Data_Collection';那些通過'Varien_Data_Collection_Db'使用Magento的ORM for DB。 – benmarks

+0

不知道,現在檢查我認識的Alan Storm網站。將嘗試使用它,看看會發生什麼。你推薦什麼,使用'Varien_Data_Collection'或'Varien_Data_Collection_Db'? – Yaroslav

0

發現錯誤。在for..each內部,我試圖多次添加同一個對象,並且在ID被重複時錯誤是正確的。正確的代碼如下:

$myResultCollection = new Varien_Data_Collection(); 
$mybanner = new Varien_Object(); 
$found = false; 
foreach($myBannersCollection as $banner){ 
    $mybanner = $banner; 
    $search_text = explode(",", $banner->getsearch_text()); 
    foreach ($search_text as $txt){ 
     if (stripos($currentProdName,$txt) !== false) { 
      $mybanner = $banner; 
      $myResultCollection->addItem($mybanner); 
      $found = true; 
     } 
     if ($found) break; 
    } 
} 

編輯 @benmarks你的答案,我的第一個片段是正確的,因爲在這裏評論我的asnwer。但在第二個我不太確定。在Magento中,並不是所有的集合都從基本的Varien_Data_Collection「繼承」?

+1

我不確定你的意思是「不是所有的集合」都從基本的Varien_Data_Collection繼承了「(這個語法有點讓我失望)。所有典型的集合繼承自'Varien_Data_Collection',這將表明'Dts_Banners_Model_Bannersadmin'不是集合類,這是我通過'getModel()'實例化的東西。典型的集合類是作爲資源模型來訪問的。 Magento數據模型(用'_init()'初始化'Mage_Core_Model_Abstract'的實例)存在一個方便的方法'getCollection()'。 – benmarks

+0

對不起,我的英語,而不是母語在這裏。我試圖說我認爲所有從'Varien_Data_Collection'繼承的集合,因此我可以實例化我的模型。但我認爲這是不可能的。關於'getCollection()',是的,我知道它存在,我使用它。也許我只是做了一切錯誤,我是Magento/Zend框架的新手。我想要做的是創建一個新的集合,它將只有完成某些給定條件的元素,然後這個新集合將用於在產品詳細信息頁面上顯示這些元素。 – Yaroslav

相關問題