質問 > 管理機能 > 削除した商品の並び順情報が残ってしまうようです |
管理機能
フラット表示 | 前のトピック | 次のトピック |
投稿者 | スレッド |
---|---|
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 |