Ticket #986 (closed 新規開発: 修正済)
[フロント]フロントパーツ
Reported by: | kotani | Owned by: | yomoro |
---|---|---|---|
Priority: | 中 | Milestone: | EC-CUBE2.11.0 リファクタリングProject |
Component: | フロント | Version: | 2.11.0 β |
Keywords: | Cc: | ||
修正済み: |
Description (last modified by kajiwara) (diff)
▼リファクタリング対象ファイル
/frontparts/bloc/LC_Page_FrontParts_Bloc.php
/frontparts/bloc/LC_Page_FrontParts_Bloc_Best5.php
/frontparts/bloc/LC_Page_FrontParts_Bloc_Calendar.php
/frontparts/bloc/LC_Page_FrontParts_Bloc_Cart.php
/frontparts/bloc/LC_Page_FrontParts_Bloc_Category.php
/frontparts/bloc/LC_Page_FrontParts_Bloc_Login.php
/frontparts/bloc/LC_Page_FrontParts_Bloc_News.php
/frontparts/bloc/LC_Page_FrontParts_Bloc_SearchProducts.php
/frontparts/LC_Page_FrontParts_LoginCheck.php
リファクタリングガイドライン
http://svn.ec-cube.net/open_trac/wiki/リファクタリングガイドライン
Change History
comment:3 Changed 13 years ago by yomoro
- Status changed from assigned to closed
- Resolution set to 修正済
comment:4 Changed 13 years ago by kajiwara
- Status changed from closed to reopened
- Resolution 修正済 deleted
yomoro様 ありがとうございます!
取り急ぎ全ブロックの動作を確認してみました。
以下にて動作が不安定な部分がございますので、ご確認いただけると幸いです。
■ログインブロック
ログイン・ログアウト処理で下記エラー発生。
Fatal error: Call to a member function setParam() on a non-object in /data/class/pages/frontparts/LC_Page_FrontParts_LoginCheck.php on line 81
■カテゴリブロック
商品一覧ページを開いたとき、表示しているカテゴリーが開かない。
ということで、一旦チケットは差し戻しいたします。
また、別途ソースの確認を行い、フィードバックさせていただきます。
リファクタリングを開始したばかりで、色々分からないことがあると思いますが、随時フィードバックさせていただきますので、何卒よろしくお願い致します!!
comment:5 Changed 13 years ago by yomoro
了解しました!チェック&ご指摘有り難う御座います! なるべく多くご協力できるようがんばります!
引き続き何卒宜しくお願い申し上げます!
comment:6 Changed 13 years ago by kajiwara
- Description modified (diff)
yomoro様
株式会社ロックオンの梶原でございます。
今回、リファクタリングガイドラインが結構多岐にわたっており、そんな中で作業いただいており、本当にありがとうございます。
というところで、少し時間がかかってしまいましたが、ソースの確認をさせていただきました。
以下の点がリファクタリングガイドラインから外れておりますので、修正いただけるとありがたいです。
(1)http://svn.ec-cube.net/open_trac/wiki/リファクタリングガイドライン#ビジネスロジック
- 宣言を除き, 引数や返り値が無く, すべて内部のメンバ変数で処理するような関数は極力作成しない
こちらは分かりにくいと思いますので、申し訳ございませんが、以下チケットで同様の指摘をさせていただいておりますので、ご参照いただければ幸いです。
▼その他注意事項
(1)関数の引数にオブジェクトのインスタンスを渡している場合, 明示的 に参照渡しをしていないので, PHP4 環境で予期せぬ不具合が発生する可能性があります.
(2)LC_Page_FrontParts_Bloc_Category.php に, 下記のようなコードが見られますが, SC_Display::detectDevice() は boolean を返しません.
if (SC_Display::detectDevice() === true) {
以上、姑みたいなチェックで申し訳ございません。
今回、「とりあえず動作する」⇒「振る舞いが綺麗なソースにする」 という観点で進めておりますので、ご了承いただきたく思います。
お忙しい中、ご協力いただいており恐縮ですが、ご確認のほどよろしくお願い致します。
また、分からないことがございましたら、他コミッター様への情報共有も兼ね、本チケットに返信いただけますと幸いです。
それでは、どうぞよろしくお願い致します。
comment:7 Changed 13 years ago by yomoro
- Status changed from reopened to closed
- Resolution set to 修正済
comment:8 Changed 13 years ago by kotani
- Status changed from closed to reopened
- Resolution 修正済 deleted
yomoro様
株式会社ロックオン小谷です。お世話になっております。
r20169 にて、vw_products_allclass を削除する形にリファクタリングして頂きありがとうございます。
早速ソースを確認させて頂きましたところ、ご修正頂きたい部分がございましたので、下記に記述致します。
93行目:$sql .= ' DISTINCT';
DISTINCT は不要です。
113行目~120行目
ループの中でSQLクエリを発行する形になっています。
1度のクエリで商品データを取得し、おすすめ商品データとマージする形にご修正頂けますと大変助かります。
118行目:$arrProduct[$key] = array_merge($val, $arrProductLsit[0]);
× $arrProductLsit, ○ $arrProductList
ミスタイプかと思われます。細かくてすみません。。。
お忙しい中ご協力頂いており大変恐縮ですが、ご確認のほどよろしくお願い致します。
comment:9 Changed 13 years ago by yomoro
- Status changed from reopened to closed
- Resolution set to 修正済
完了しました!ご確認の程、何卒よろしくお願い申し上げます。
comment:10 Changed 13 years ago by nanasess
- Status changed from closed to reopened
- Resolution 修正済 deleted
-
branches/version-2_5-dev/data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Best5.php
90 90 $objQuery = SC_Query::getSingletonInstance(); 91 91 $sql = ''; 92 92 $sql .= ' SELECT'; 93 $sql .= ' DISTINCT';94 93 $sql .= ' T1.best_id,'; 95 94 $sql .= ' T1.category_id,'; 96 95 $sql .= ' T1.rank,'; … … 108 107 $arrBestProducts = $objQuery->getAll($sql); 109 108 // 各商品の詳細情報を取得 110 109 $objQuery = SC_Query::getSingletonInstance(); 111 $arrProduct = array();112 110 $objProduct = new SC_Product(); 111 // where条件生成&セット 112 $arrBestProductIds = array(); 113 $where = 'product_id IN ( '; 113 114 foreach( $arrBestProducts as $key => $val ) { 114 $where = 'product_id = ' . $val['product_id']; 115 $objQuery->setWhere($where); 116 $arrProductLsit = $objProduct->lists($objQuery); 117 if ( !empty($arrProductLsit) ) { 118 $arrProduct[$key] = array_merge($val, $arrProductLsit[0]); 115 $arrBestProductIds[] = $val['product_id']; 116 } 117 $where .= implode(', ', $arrBestProductIds); 118 $where .= ' )'; 119 $objQuery->setWhere($where); 120 // 取得 121 $arrProductList = $objProduct->lists($objQuery); 122 // おすすめ商品情報とマージ 123 $arrProduct = array(); 124 foreach( $arrProductList as $pdct_key => $pdct_val ) { 125 foreach( $arrBestProducts as $best_key => $best_val ) { 126 if ( $pdct_val['product_id'] == $best_val['product_id'] ) { 127 $arrProduct[$best_key] = array_merge($best_val, $pdct_val); 128 break; 129 } 119 130 } 120 131 } 121 132 return $arrProduct;
107行目 $arrBestProducts に結果が入らなかった場合の処理がされてないので, 後続の処理で DBエラーが発生するようです.
あと, 67行目の SC_SiteInfo は非推奨なので SC_Helper_DB_Ex::sfGetBasisData(); に置きかえていただければと思います.
comment:11 Changed 13 years ago by yomoro
- Status changed from reopened to closed
- Resolution set to 修正済
nanasess様 kotani様
再度コミットしました。 お忙しいところ大変恐縮でございますが ご確認の程、何卒よろしくお願い申し上げます。