バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

バグ報告 > 管理機能 > 【2.12.2】「商品管理>商品並び替え」が正常に行えない

管理機能

新規スレッドを追加する

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
casa
投稿日時: 2013/4/13 21:12
対応状況: −−−
長老
登録日: 2011/10/3
居住地:
投稿: 210
【2.12.2】「商品管理>商品並び替え」が正常に行えない
お世話になります。

----------
EC-CUBE: 2.12.2
MySQL: 5.5.16
----------

以下に同様の問題が報告されていますが、解決策が取り込まれていないようでしたので投稿致します。取り込めない理由・懸念などがありましたらご教授ください。
http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=4833&forum=11

問題点1: 商品削除時に商品カテゴリ(dtb_product_categories)が削除されていない
問題点2: 商品登録画面で、登録していたカテゴリを 「削除 ->」 ボタンで外したときに、商品カテゴリを削除したあとrankを詰めていない

問題点1の結果、商品カテゴリに不要なレコードが残ります。
問題点2の結果、商品カテゴリのrankが飛び飛びになります。

これらの状態になると題名の通り、商品並び替えが正常に行えなくなります(指定した順位に移動しない、上へ/下へを何度かクリックしないと移動しない)。

当方では以下のように修正しました。

■SC_Helper_DB

    // ▼既存処理修正
    function removeProductByCategories($category_id, $product_id) {
        $objQuery =& SC_Query_Ex::getSingletonInstance();

        $table = 'dtb_product_categories';
        $where = 'product_id = ? AND category_id = ?';
        $arrVal = array($product_id, $category_id);

        // 削除レコードのランクを取得する。
        $rank = $objQuery->get('rank', $table, $where, $arrVal);

        // 該当レコードの削除
        $objQuery->delete($table, $where, $arrVal);

        // 削除レコードのランクより上のレコードを一つずらす。
        $where = 'category_id = ? AND rank > ?';
        $sqlup = "UPDATE $table SET rank = (rank - 1) WHERE $where";
        $objQuery->exec($sqlup, array($category_id, $rank));
    }


■LC_Page_Admin_Products

    // ▼1行追加
    function doDelete($where, $arrParam = array()) {
        $objQuery =& SC_Query_Ex::getSingletonInstance();
        $sqlval['del_flg']     = 1;
        $sqlval['update_date'] = 'CURRENT_TIMESTAMP';
        $objQuery->begin();
        $objQuery->update('dtb_products_class', $sqlval, "product_id IN (SELECT product_id FROM dtb_products WHERE $where)", $arrParam);
        $objQuery->delete('dtb_customer_favorite_products', "product_id IN (SELECT product_id FROM dtb_products WHERE $where)", $arrParam);
        $this->lfDeleteProductCategories($where, $arrParam);  // <-- ★追加
        $objQuery->update('dtb_products', $sqlval, $where, $arrParam);
        $objQuery->commit();
    }

    // ▼新規追加
    /**
     * 商品カテゴリから削除対象商品のレコードを削除
     * 
     * @param  string $where 削除対象の WHERE 句
     * @param  array $arrParam 削除対象の値
     * @return void
     */
    function lfDeleteProductCategories($where, $arrParam = array()) {
        $objQuery =& SC_Query_Ex::getSingletonInstance();
        $objDb = new SC_Helper_DB_Ex();

        // 削除対象の商品IDを取得
        $arrProductIds = $objQuery->getCol('product_id', 'dtb_products', $where, $arrParam); 

        foreach ($arrProductIds as $product_id) {
            // 登録されているカテゴリ情報を取得
            $arrCurrentCat = $objQuery->getCol('category_id', 'dtb_product_categories', 'product_id = ?', array($product_id));

            // 登録されているカテゴリからレコード削除
            foreach ($arrCurrentCat as $category_id) {
                $objDb->removeProductByCategories($category_id, $product_id);
            }
        }
    }


2.12.3の場合 doDelete の処理が若干違うので注意が必要ですが、問題ないと思います。
ご確認をお願い致します。
フラット表示 前のトピック | 次のトピック


題名 投稿者 日時
 » 【2.12.2】「商品管理>商品並び替え」が正常に行えない casa 2013/4/13 21:12
     Re: 【2.12.2】「商品管理>商品並び替え」が正常に行えない casa 2013/4/13 21:23
       Re: 【2.12.2】「商品管理>商品並び替え」が正常に行えない AMUAMU 2013/4/16 3:49
         Re: 【2.12.2】「商品管理>商品並び替え」が正常に行えない casa 2013/4/16 9:17
           Re: 【2.12.2】「商品管理>商品並び替え」が正常に行えない AMUAMU 2013/4/16 17:54

 



ログイン


EC-CUBEペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は67,446名です
総投稿数は98,813件です

投稿数ランキング

1
seasoft
7333
2
AMUAMU
2712
3
468
2693
4
nanasess
2116
5
umebius
1789
6
yuh
1612
7
red
1427
8
h_tanaka
1051
9
fukap
907
10
tsuji
863
11
shutta
835
12
tao_s
792
13 ramrun 789
14 karin 657
15 sumida 641
16
homan
633
17 DELIGHT 571
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

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

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