シェアする

  • このエントリーをはてなブックマークに追加

[EC-CUBE]お気に入り機能を追加するメモ

ファイル一覧

時間がないのでメモだけ。

EC-CUBEでログインしたユーザが商品をお気に入り登録できるようにする機能。
EC-CUBEの学校」でも使われている機能です。

導入の参考になるのは
チェンジセット 17162 – EC-CUBE Trac – Trac

このカスタマイズは既存のファイルもかなり触るので、間違えようによってはEC-CUBEが動かなくなります。簡単そうだとやってみてEC-CUBEが動かなくなってしまったなんていうと大変ですので、今回は詳しい解説を省かせていただきます*[1] 。Tracを読んでもできなそうだと感じた方はこのカスタマイズをしないことをお薦めします。そしてもちろん自己責任という言葉を胸に刻むのも忘れずに。

Tracの見かただけ簡単に説明

ファイル一覧

ファイル一覧

ファイル一覧の左に四角いマスがありますが、黄色が「更新されたファイル」緑が「新規のファイル」になります。

緑のファイルは新しく作らなくてはならないファイルになりますので、該当ファイルのファイル名をクリックして、開いた画面の一番下のほう「異なるフォーマットでダウンロード->Original Format」を選択してファイルをダウンロードして、所定の位置*[2] に設置してください。

ファイルをダウンロード

異なるフォーマットでダウンロード

黄色のファイルは、既存のファイルに追記、または修正しなければならないので、Diffをとりながら編集することになります。
ファイル一覧の下のほうにこんな感じでファイルの変更点を表したソースが表示されていますね?

インラインのDiff

インラインのDiff

これだと素人*[3] にはちょっとわかりずらいので、画面右上の

表示方法の設定

表示方法の設定

で「インライン」になっているところを「並べて表示」に変更してみましょう。

並べて表示のDiff

並べて表示のDiff

ほら、これならなんとなくわかりますね。
左が変更前、右が変更後のソースを表しています。

それぞれのソースにしたがって変更を加えていけば無事にお気に入り機能が追加できると思います。
もちろんここで追加するのはインストール時にテーブルを生成してパラメータを追加する処理だけですので、データベーステーブルは自分で作ってくださいね。

躓きやすいところ

  • テーブルとパラメータの追加を忘れないこと
    すでにインストールされたEC-CUBEにお気に入り機能を追加するならdtb_customer_favorite_productsテーブルとmtb_constantsテーブルのOPTION_FAVOFITE_PRODUCTは自分で追加する必要があります。
    もしわからなければ最初からインストールし直せばいいです。今あるデータは消えちゃいますが。
  • myPageのお気に入りを開くと商品に登録されたカテゴリの数だけ重複して表示されちゃう*[4]
    この問題の対応として「僕は」LC_Page_Products_Detail.phpに加えた修正で

            // DBから商品情報を取得する。
            $arrRet = $objQuery->select("*, (SELECT count(*) FROM dtb_customer_favorite_products WHERE product_id = alldtl.product_id AND customer_id = ?) AS favorite_count", "vw_products_allclass_detail AS alldtl", "product_id = ?", array($objCustomer->getValue('customer_id'), $tmp_id));
            $this->arrProduct = $arrRet[0];
    

    というところがありますが、これを

            // DBから商品情報を取得する。
            $arrRet = $objQuery->select("*, (SELECT count(*) FROM dtb_customer_favorite_products WHERE product_id = alldtl.product_id AND customer_id = ?) AS favorite_count", "vw_products_allclass_detail AS alldtl", "product_id = ?", array($objCustomer->getValue('customer_id'), $tmp_id));
            $this->arrProduct = $arrRet[0];
    

    のように変更。そしてSC_DB_DBFactory_MYSQL.phpのviewToSubQueryメソッドの配列のvw_products_allclass_detailにmail_list_imageを追加しました*[5]
    本来であればお気に入り表示用のクエリを別に用意したほうがいいかもしれませんが今回は急いでいたこともあり手を抜きました。

気になったこと

今回のカスタマイズで追加した/data/Smarty/templates/default/favorite.tplで、formタグがネストされている気がするんですけどこれはこれでいいんでしょうか?僕はずっとformタグを入れ子にしてはいけないと思ってたんですが、これは理由あってのことなんですかね。

  1. 以前行ったカスタマイズで「カテゴリに画像やコンテンツを登録できるようにする」というのをやったのですが、僕の説明不足で迷惑がかかってしまった方がいらっしゃいました。もちろん僕の書き方が悪かったりソースに間違いがあったりということが原因ですが、何かあったときに僕もすぐに対応することが難しいので、親切とはいえないと思いますがこのようなスタンスを取らせていただきます。ごめんなさいm_ _m []
  2. 開いたページの一番上にパスが書いてありますね? []
  3. 僕のことなんですがね^^; []
  4. これは僕だけかも。だいぶ手を加えているのでそのせいでこんなことになっているのかもしれないので、該当しない方は無視してOKです。 []
  5. もしこの説明でわからないようであれば触らないほうがいいです。念のため。 []

シェアする

  • このエントリーをはてなブックマークに追加

フォローする