バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > 管理機能 > 削除した商品の並び順情報が残ってしまうようです

管理機能

新規スレッドを追加する

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
134
投稿日時: 2009/10/22 17:12
対応状況: −−−
一人前
登録日: 2009/10/20
居住地: 京都市
投稿: 91
Re: 削除した商品の並び順情報が残ってしまうようです
ecbg様

お返事ありがとうございました。

>正規版での商品並べ替え不具合はこのチェンジセットだけでは修正できませんが、コミュニティ版と同じようにビューの変更も行いましたか

チェンジセット17938は適用しました。
チェンジセット17959およびビューの変更は、検討した結果、問題を承知の上で適用は保留しています。

保留している変更内容をもういちど確認したのですが、やはり問題はここではないように思い、対応を迫られていたこともあり、結果的に自己解決しました。
また、商品の削除時のみと報告していましたが、商品の編集時にカテゴリの所属を外す場合にも問題がありました。
(dtb_product_categories からレコードは削除されるのですが、消えた分のrankが詰まらず、やはり並び替えの動作に影響を与えています)

だいたい、下記のような変更を加えました。

◆/data/class_extends/helper_extends/SC_Helper_DB_Ex.php

removeProductByCategories をオーバーライドし、dtb_product_categories からレコードを削除した際に、rankをつめるようにしました。
これにあわせて、updateProductCategories も調整しました。

function updateProductCategories($arrCategory_id, $product_id) {
$objQuery = new SC_Query();

// 現在のカテゴリ情報を取得
$arrCurrentCat = $objQuery->select("product_id, category_id, rank",
"dtb_product_categories",
"product_id = ?",
array($product_id));

// 登録するカテゴリ情報と比較
foreach ($arrCurrentCat as $val) {

// 登録しないカテゴリを削除
if (!in_array($val["category_id"], $arrCategory_id)) {
$this->removeProductByCategories($val["category_id"], $product_id, $val['rank']);
}
}

// カテゴリを登録
foreach ($arrCategory_id as $category_id) {
$this->addProductBeforCategories($category_id, $product_id);
}
}

function removeProductByCategories($category_id, $product_id, $rank = NULL) {
$objQuery = new SC_Query();
$sqlval = array("category_id" => $category_id,
"product_id" => $product_id);

// rankが不明の場合は取得する
if (is_null($rank)) {
list($rank) = $objQuery->getrow("dtb_product_categories", "rank", "category_id = ? AND product_id = ?", $sqlval);
}

$objQuery->delete("dtb_product_categories",
"category_id = ? AND product_id = ?", $sqlval);

// 削除した商品よりもrankが上のものをずらす
$sqlup = "UPDATE dtb_product_categories SET rank = (rank - 1) WHERE category_id = ? AND rank > ?";
$objQuery->exec($sqlup, array($category_id, $rank));

}


◆/data/class_extends/page_extends/admin/products/LC_Page_Admin_Products_Ex.php

process をオーバーライドし、商品の削除時に、SC_Helper_DB_Ex::removeProductByCategories を呼ぶようにしました。
(LC_Page_Admin_Products.php では139行目あたりに下記を追記)

$categories = $objQuery->select('category_id, rank', 'dtb_product_categories', 'product_id = ?', array($_POST['product_id']));
foreach ($categories as $category) {
$objDb->removeProductByCategories($category['category_id'], $_POST['product_id'], $category['rank']);
}


既存データのコンバートは、別途プログラムを作成して行いました。

若干不安はありますが、これで今のところ問題はなさそうです。
少なくとも2.4.0、2.4.1では再現すると思うのですが、皆さん目をつむって使ってられるのでしょうか。

お手数おかけした皆様、お騒がせして申し訳ありませんでした。
ありがとうございました。
フラット表示 前のトピック | 次のトピック


題名 投稿者 日時
   削除した商品の並び順情報が残ってしまうようです 134 2009/10/20 17:28
     Re: 削除した商品の並び順情報が残ってしまうようです ecbg 2009/10/20 17:53
     Re: 削除した商品の並び順情報が残ってしまうようです yokoshima 2009/10/20 18:48
       Re: 削除した商品の並び順情報が残ってしまうようです 134 2009/10/20 19:29
         Re: 削除した商品の並び順情報が残ってしまうようです ecbg 2009/10/21 9:13
         » Re: 削除した商品の並び順情報が残ってしまうようです 134 2009/10/22 17:12

 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
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.