バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > 管理機能 > 商品複製時(規格あり)ついて

管理機能

新規スレッドを追加する

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
ec9iii
投稿日時: 2014/9/18 22:38
対応状況: −−−
一人前
登録日: 2014/9/8
居住地:
投稿: 117
Re: 商品複製時(規格あり)ついて
規格あり商品をコピーして、規格なし商品を作成するということでよろしいでしょうか?
いろいろ手法はあると思いますが、ポイントになりそうな箇所を記載します。

/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php


    /**
     * DBから商品データを取得する
     *
     * @param  integer $product_id 商品ID
     * @return array   商品データ配列
     */
    public function lfGetProductData_FromDB($product_id)
    {
        $objQuery =& SC_Query_Ex::getSingletonInstance();
        $arrProduct = array();

        // 商品データ取得
        $col = '*';
        $table = <<< __EOF__
            dtb_products AS T1
            LEFT JOIN (
                SELECT product_id AS product_id_sub,
                    product_code,
                    price01,
                    price02,
                    deliv_fee,
                    stock,
                    stock_unlimited,
                    sale_limit,
                    point_rate,
                    product_type_id,
                    down_filename,
                    down_realfilename
                FROM dtb_products_class
            ) AS T2
                ON T1.product_id = T2.product_id_sub
__EOF__;
        $where = 'product_id = ?';
        $objQuery->setLimit('1');
        $arrProduct = $objQuery->select($col, $table, $where, array($product_id));

        // カテゴリID取得
        $col = 'category_id';
        $table = 'dtb_product_categories';
        $where = 'product_id = ?';
        $objQuery->setOption('');
        $arrProduct[0]['category_id'] = $objQuery->getCol($col, $table, $where, array($product_id));

        // 規格情報ありなしフラグ取得
        $objDb = new SC_Helper_DB_Ex();
        $arrProduct[0]['has_product_class'] = $objDb->sfHasProductClass($product_id);
        
        $arrProduct[0]['has_product_class'] = false;    //←この行を追加

        // 規格が登録されていなければ規格ID取得
        if ($arrProduct[0]['has_product_class'] == false) {
            $arrProduct[0]['product_class_id'] = SC_Utils_Ex::sfGetProductClassId($product_id,'0','0');
        }

        // 商品ステータス取得
        $objProduct = new SC_Product_Ex();
        $productStatus = $objProduct->getProductStatus(array($product_id));
        $arrProduct[0]['product_status'] = $productStatus[$product_id];

        // 関連商品データ取得
        $arrRecommend = $this->lfGetRecommendProductsData_FromDB($product_id);
        $arrProduct[0] = array_merge($arrProduct[0], $arrRecommend);

        return $arrProduct[0];
    }




    /**
     * 規格データをコピーする
     *
     * @param  array   $arrList  フォーム入力パラメーター配列
     * @param  object  $objQuery SC_Queryインスタンス
     * @return boolean エラーフラグ
     */
    public function lfCopyProductClass($arrList, &$objQuery)
    {
        // 複製元のdtb_products_classを取得(規格なしのため、1件のみの取得)
        $col = '*';
        $table = 'dtb_products_class';
        $where = 'product_id = ?';
        $where .= ' AND classcategory_id1 = 0';     //←この行を追加
        $where .= ' AND classcategory_id2 = 0';     //←この行を追加
        $arrProductClass = $objQuery->select($col, $table, $where, array($arrList['copy_product_id']));

        //トランザクション開始
        $objQuery->begin();
        $err_flag = false;
        //非編集項目は複製、編集項目は上書きして登録
        foreach ($arrProductClass as $records) {
            foreach ($records as $key => $value) {
                if (isset($arrList[$key])) {
                    switch ($key) {
                    case 'stock_unlimited':
                        $records[$key] = (int) $arrList[$key];
                        break;
                    default:
                        $records[$key] = $arrList[$key];
                        break;
                    }
                }
            }

            $records['del_flg'] = 0;     //←この行を追加
            $records['product_class_id'] = $objQuery->nextVal('dtb_products_class_product_class_id');
            $records['update_date'] = 'CURRENT_TIMESTAMP';
            $records['create_date'] = 'CURRENT_TIMESTAMP';
            $objQuery->insert($table, $records);
            //エラー発生時は中断
            if ($objQuery->isError()) {
                $err_flag = true;
                continue;
            }
        }
        //トランザクション終了
        if ($err_flag) {
            $objQuery->rollback();
        } else {
            $objQuery->commit();
        }

        return !$err_flag;
    }


このままでは編集時などにも影響してしまいますので、
上記の追加した行の部分がコピー時のみ通るようになれば良さそうに思います。
なお、classcategory_id1 = 0 AND classcategory_id2 = 0 のデータが存在する前提です。
(※Ver.2.13.2で試していますが、お使いのバージョンでも同じだと思います)

ご参考になりましたら幸いです。
フラット表示 前のトピック | 次のトピック


題名 投稿者 日時
   商品複製時(規格あり)ついて motorp 2014/9/18 21:16
   » Re: 商品複製時(規格あり)ついて ec9iii 2014/9/18 22:38
     Re: 商品複製時(規格あり)ついて seiyawada 2014/9/18 22:40
       Re: 商品複製時(規格あり)ついて motorp 2014/9/19 17:18
         Re: 商品複製時(規格あり)ついて motorp 2014/9/19 19:44
           Re: 商品複製時(規格あり)ついて ec9iii 2014/9/19 23:11
             Re: 商品複製時(規格あり)ついて motorp 2014/9/20 21:23
               Re: 商品複製時(規格あり)ついて motorp 2014/9/21 1:33
                 Re: 商品複製時(規格あり)ついて ec9iii 2014/9/21 2:29
                   Re: 商品複製時(規格あり)ついて motorp 2014/9/22 16:18

 



ログイン


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

統計情報

総メンバー数は89,468名です
総投稿数は110,099件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1655
8
red
1570
9
mcontact
1306
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.