バージョン選択

フォーラム

メニュー

オンライン状況

62 人のユーザが現在オンラインです。 (51 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 62
もっと...

サイト内検索

プラグイン > バグ報告・利用に関する質問 > 関連商品プラグインのエラー

バグ報告・利用に関する質問

新規スレッドを追加する

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
468
投稿日時: 2018/7/11 1:38
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: 関連商品プラグインのエラー
プラグイン内の/Event/Event.php 164行目の以下の記述が原因で
一旦すべて、関連商品データを削除して新規登録し直しているようです。
$app['eccube.plugin.repository.related_product']->removeChildProduct($Product);


function onRenderAdminProductComplete()の中を
以下のソースのように、登録済の関連商品と画面から送信された関連商品を比較して、追加・更新・削除を行うようにすれば、
無駄にIDを消費する事は無くなると思います。

    public function onRenderAdminProductComplete(EventArgs  $event)
    {
        log_info('RelatedProduct trigger onRenderAdminProductComplete start');
        $app = $this->app;
        $Product = $event->getArgument('Product');
        $form = $event->getArgument('form');
        //$app['eccube.plugin.repository.related_product']->removeChildProduct($Product);
        
        
        //$FromRelatedProducts = $app['eccube.plugin.repository.related_product']->getRelatedProduct($Product, Constant::DISABLED);
        $FromRelatedProducts = $app['eccube.plugin.repository.related_product']->findBy(array('Product' => $Product));
        //更新対象の関連商品を一時的に格納する配列
        $updateRelatedProducts = array();
        //削除対象の関連商品を一時的に格納する配列
        $deleteRelatedProducts = array();
                
        log_info('remove all now related product data of ', array('Product id' => $Product->getId()));
        
        $RelatedProducts = $form->get('related_collection')->getData();
        
        if (count($FromRelatedProducts) == 0) {
            //関連商品が未登録の場合
            foreach ($RelatedProducts as $RelatedProduct) {
            
                /* @var $RelatedProduct \Plugin\RelatedProduct\Entity\RelatedProduct */
                if ($RelatedProduct->getChildProduct() instanceof Product) {

                    $RelatedProduct->setProduct($Product);
                    $app['orm.em']->persist($RelatedProduct);
                    $app['orm.em']->flush($RelatedProduct);
                    log_info('save new related product data to DB ', array('Related Product id' => $RelatedProduct->getId()));
                    
                }
            
            }
            
        } else {
            //既に登録されている関連商品と画面から渡された関連商品を比較
            foreach ($FromRelatedProducts as $FromRelatedProduct) {
            
                $deleteFlg = true;
                $FromChildProduct = $FromRelatedProduct->getChildProduct();
                if ($FromChildProduct) {
                    foreach ($RelatedProducts as $RelatedProduct) {
                    
                        /* @var $RelatedProduct \Plugin\RelatedProduct\Entity\RelatedProduct */
                        if ($RelatedProduct->getChildProduct() instanceof Product) {
                            if ($RelatedProduct->getChildProduct()->getId() == $FromChildProduct->getId()) {
                                //既に登録済の関連商品は更新する
                                $deleteFlg = false;
                                $updateRelatedProducts[] = $RelatedProduct;
                                
                                $FromRelatedProduct->setContent($RelatedProduct->getContent());
                                $app['orm.em']->persist($FromRelatedProduct);
                                $app['orm.em']->flush($FromRelatedProduct);
                                
                                break;
                            }
                        }
                    }
                }
            
                if ($deleteFlg) {
                    $deleteRelatedProducts[] = $FromRelatedProduct;
                }
            
            }
            
            //画面から渡された関連商品の内、新規追加分を登録
            foreach ($RelatedProducts as $RelatedProduct) {
                if ($RelatedProduct->getChildProduct() instanceof Product) {
                    if (!in_array($RelatedProduct, $updateRelatedProducts)) {
                        $RelatedProduct->setProduct($Product);
                        $app['orm.em']->persist($RelatedProduct);
                        $app['orm.em']->flush($RelatedProduct);
                        log_info('save new related product data to DB ', array('Related Product id' => $RelatedProduct->getId()));
                    }
                }
            }
            
            //既に登録済で画面から渡された関連商品に存在しなかった関連商品を削除
            foreach ($deleteRelatedProducts as $RelatedProduct) {
                $app['orm.em']->remove($RelatedProduct);
                $app['orm.em']->flush($RelatedProduct);
            }
        }
        
        log_info('RelatedProduct trigger onRenderAdminProductComplete finish');
    }

※軽く動作確認していますが、パパッと書いたコードなので、きちんとした検証は必要かと思います。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

フラット表示 前のトピック | 次のトピック


題名 投稿者 日時
   関連商品プラグインのエラー naham 2018/7/9 13:15
   » Re: 関連商品プラグインのエラー 468 2018/7/11 1:38
       Re: 関連商品プラグインのエラー red 2018/7/11 21:00
         Re: 関連商品プラグインのエラー naham 2018/7/17 17:19
       Re: 関連商品プラグインのエラー naham 2018/7/17 17:18

 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,905名です
総投稿数は110,006件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1296
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.