0

カスタム作成されたコレクションにいくつかのアイテムを追加しようとしています。Alan Storm varienデータ収集とこのSOの質問を読んで、私はいくつかの異なるオプションにたどり着きました。

Varien_Data_Collectionを使用する1つのオプションは次のとおりです。

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

しかし、これは次のエラーを示しています(すべてを表示していない、長い道のりです):

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] => 
            .......

私が間違っているのは何ですか?

4

2 に答える 2

2

問題#1:インスタンスに追加されるアイテムVarien_Data_Collectionは、コレクションのコンテキストで個別のIDを持つ必要があります。

問題#2: Dts_Banners_Model_BannersadminはのインスタンスではありませんVarien_Data_Collection

于 2012-11-30T13:21:22.500 に答える
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を編集して、私の最初のスニペットに対するあなたの答えは正しいですしかし、2番目のものについてはよくわかりません。Magentoでは、すべてのコレクションが基本的なVarien_Data_Collectionから「継承」するわけではありませんか?

于 2012-11-30T13:25:16.080 に答える