2012-11-30 3 views
0

사용자 정의 생성 모음에 일부 항목을 추가하려고합니다. 읽기 Alan Storm varien data collection와이 SO question 나는 두 가지의 다른 옵션을 얻었다. 모델 현재 I에서 내 사용자 지정 컬렉션을 사용하여 코드의 또 다른 변형은 여기Magento, 사용자 정의 모음에 추가 항목

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

그리고 :

$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); 
      } 
     } 
    } 

이 코드는 다음과 같은 오류가 발생합니다 :

여기 Varien_Data_Collection를 사용하여 하나 개의 옵션입니다 사용 :

$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_BannersadminVarien_Data_Collection의 인스턴스가 아닙니다.

+0

두 번째 것. Magento에서는 모든 컬렉션이 기본 Varien_Data_Collection에서 "상속"되지 않습니까? – Yaroslav

+1

모든 전형적인 Magento 콜렉션은'Varien_Data_Collection'을 사용합니다; Magento의 DB에 대한 ORM을 사용하는 사람들은'Varien_Data_Collection_Db'을 통해 그렇게합니다. – benmarks

+0

알던 스톰 사이트를 확인 했으므로 깨달았습니다. 그것을 사용 해보고 무슨 일이 일어날지를 볼 것입니다. 'Varien_Data_Collection' 또는'Varien_Data_Collection_Db'을 사용하는 것이 좋습니다. – Yaroslav

0

오류를 발견했습니다. for..each 안에 여러번 동일한 객체를 추가하려고 시도했는데 ID가 반복 될 때 오류가 정확하다는 사실을 알았습니다. 올바른 코드를 다음과 같이 내 asnwer 여기에 댓글로 나의 첫번째 조각에 대한 답을 @benmarks

$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; 
    } 
} 

편집, 맞습니다. 그러나 두 번째 질문에서 나는 그렇게 확신하지 못합니다. 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

관련 문제