Ticket #986 (closed 新規開発: 修正済)

Opened 13 years ago

Last modified 13 years ago

[フロント]フロントパーツ

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:1 Changed 13 years ago by yomoro

  • Owner changed from somebody to yomoro

comment:2 Changed 13 years ago by yomoro

  • Status changed from new to assigned

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/リファクタリングガイドライン#ビジネスロジック

  • 宣言を除き, 引数や返り値が無く, すべて内部のメンバ変数で処理するような関数は極力作成しない

こちらは分かりにくいと思いますので、申し訳ございませんが、以下チケットで同様の指摘をさせていただいておりますので、ご参照いただければ幸いです。

#979

▼その他注意事項
(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

     
    9090        $objQuery = SC_Query::getSingletonInstance(); 
    9191        $sql = ''; 
    9292        $sql .= ' SELECT'; 
    93         $sql .= ' DISTINCT'; 
    9493        $sql .= '    T1.best_id,'; 
    9594        $sql .= '    T1.category_id,'; 
    9695        $sql .= '    T1.rank,'; 
     
    108107        $arrBestProducts = $objQuery->getAll($sql); 
    109108        // 各商品の詳細情報を取得 
    110109        $objQuery = SC_Query::getSingletonInstance(); 
    111         $arrProduct = array(); 
    112110        $objProduct = new SC_Product(); 
     111        // where条件生成&セット 
     112        $arrBestProductIds = array(); 
     113        $where = 'product_id IN ( '; 
    113114        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                } 
    119130            } 
    120131        } 
    121132        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様

再度コミットしました。 お忙しいところ大変恐縮でございますが ご確認の程、何卒よろしくお願い申し上げます。

Note: See TracTickets for help on using tickets.