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
のデストラクタの後にゴソッと追加。
ちょっと実行速度が気になりますが、それはまた後で。。。
| 固定リンク
「パソコン・インターネット」カテゴリの記事
- EC-CUBE2.3.xで納品書を一括出力する(2009.11.11)
- 今さら!携帯待受Flash(2009.10.09)
- OpenPNE 備忘録(2009.10.06)
- XREAにOpenPNEインストール(2009.10.05)
- EC-CUBE 2.3.3高速化(2009.09.04)


コメント