« JavaScriptのマウスストーカー XHTML編 | トップページ | au端末でデータをPOSTできない!! »

EC-CUBE 「この商品を買った人は、こんな商品も購入しています」

よく、アマゾンなんかでもあるパターン。
「この商品を買った人は、こんな商品も購入しています」

これをEC-CUBEでもやろうかな、と思ってソースを見ていると、なんだか用意されているような感じ!!!

でも、実際にテンプレート側に、 arrRelateProducts というのに格納されている名前やら価格やらを設定して表示してみると、あれあれ、自分と同じ商品が出てくるではないですかΣ(@ロ@

ということで、今回はクラスファイルに手を入れるのではなくて、
きちんとお作法どおり、拡張クラスの方で修正してみました。

今回はDBが MySQLでしたので、viewテーブルが作成されていないため、
allclsをベタで書いたので すごい長いSQL文になっちまってますが・・・

    function lfGetRelateProducts($tmp_id) {
        $objQuery = new SC_Query;
        //自動抽出
        $objQuery->setorder("random()");
        //表示件数の制限
        $objQuery->setlimit(RELATED_PRODUCTS_MAX);
  $temp_limit = RELATED_PRODUCTS_MAX;
        //検索条件
/*    ・・・・・・LC_Page_Products_Detail.phpと同じ記述はコメントアウト 
        $col = "name, main_list_image, price01_min, price02_min, price01_max, price02_max, point_rate";
        $from = "vw_products_allclass AS allcls ";
        $where = "del_flg = 0 AND status = 1 AND (stock_max <> 0 OR stock_max IS NULL) AND product_id = ? ";
        $arrval[] = $tmp_id;
*/
  $sql = "SELECT
  A.product_id,B.name,B.main_list_image,B.price01_min, B.price02_min, B.price01_max, B.price02_max, B.point_rate,
  B.stock_max, B.stock_unlimited_max,B.stock_min,B.stock_unlimited_min FROM `dtb_order_detail` as A
  inner join

   (SELECT T1.product_id,
           product_code_min,
           product_code_max,
           price01_min,
           price01_max,
           price02_min,
           price02_max,
           stock_min,
           stock_max,
           stock_unlimited_min,
           stock_unlimited_max,
           del_flg,
           status,
           name,
           comment1,
           comment2,
           comment3,
           main_list_comment,
           main_image,
           main_list_image,
           product_flag,
           deliv_date_id,
           sale_limit,
           point_rate,
           sale_unlimited,
           create_date,
           deliv_fee,
           rank
           ,(SELECT rank AS category_rank
               FROM dtb_category AS T4
              WHERE T1.category_id = T4.category_id) as category_rank
           ,(SELECT category_id AS sub_category_id
               FROM dtb_category T4
              WHERE T1.category_id = T4.category_id) as category_id
      FROM (SELECT T0.product_id,
                   T0.del_flg,
                   T0.status,
                   T0.name,
                   T0.comment1,
                   T0.comment2,
                   T0.comment3,
                   T0.main_list_comment,
                   T0.main_image,
                   T0.main_list_image,
                   T0.product_flag,
                   T0.deliv_date_id,
                   T0.sale_limit,
                   T0.point_rate,
                   T0.sale_unlimited,
                   T0.create_date,
                   T0.deliv_fee,
                   T00.category_id,
                   T00.rank
              FROM dtb_products AS T0
         LEFT JOIN dtb_product_categories AS T00
             USING (product_id)) AS T1
RIGHT JOIN (SELECT product_id as product_id_sub,
                   MIN(product_code) AS product_code_min,
                   MAX(product_code) AS product_code_max,
                   MIN(price01) AS price01_min,
                   MAX(price01) AS price01_max,
                   MIN(price02) AS price02_min,
                   MAX(price02) AS price02_max,
                   MIN(stock) AS stock_min,
                   MAX(stock) AS stock_max,
                   MIN(stock_unlimited) AS stock_unlimited_min,
                   MAX(stock_unlimited) AS stock_unlimited_max
              FROM dtb_products_class GROUP BY product_id) AS T2
                ON T1.product_id = T2.product_id_sub
            )
   as B on A.product_id = B.product_id and B.del_flg = '0' AND B.status = '1'
  AND (stock_max <> 0 OR stock_max IS NULL)
  WHERE order_id in
  (
  SELECT AA.order_id  From dtb_order_detail as AA WHERE
   AA.product_id = $tmp_id group by AA.order_id
  )
   AND A.product_id <> $tmp_id
  group by A.product_id ORDER BY rand() limit $temp_limit;";

        //結果の取得
//       $arrProducts = $objQuery->select($col, $from, $where, $arrval);
        $arrProducts = $objQuery->getall($sql);

        return $arrProducts;
    }

これを data/class_extends/page_extends/products/LC_Page_Products_Detail_Ex.php
のデストラクタの後にゴソッと追加。

ちょっと実行速度が気になりますが、それはまた後で。。。

|

« JavaScriptのマウスストーカー XHTML編 | トップページ | au端末でデータをPOSTできない!! »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/520403/45347719

この記事へのトラックバック一覧です: EC-CUBE 「この商品を買った人は、こんな商品も購入しています」:

« JavaScriptのマウスストーカー XHTML編 | トップページ | au端末でデータをPOSTできない!! »