下記ページを参考にさせていただきました。多謝。
EC-CUBE 「この商品を買った人は、こんな商品も購入しています」
追記(2011.4.18)
EC-CUBE2.11.0 のバージョンでは、上記リンク先の変更ではひっぱれなかったので、
data\class\pages\products\LC_Page_Products_Detail.php L.255あたりに追加
//この商品を買った人はこんな商品も買っています//add by terarin 2011.04.16
$this->arrRelateProducts = $this->lfGetRelateProducts($product_id);
data\class_extends\page_extends\products\LC_Page_Products_Detail_Ex.php の、
デストラクタの下に追加。
※なんかデータベースの構造のカラムが変わったので、エラーでひっかかっていたカラムを削除しました。
あと、「group by A.product_id ORDER BY rand() limit 6;」の「limit」の後にあった変数が引っかかっていて、ちょっと探るのが面倒だったから数字を直接入れてしまったです。この当たりは、調整してやってくださいませ。
追記(2019.3.27)
商品に規格がある場合、規格で設定していない最低値(規格発生する前に登録した商品の値段)が表示される不具合がありましたので、赤字の部分を追加。
$this->arrRelateProducts = $this->lfGetRelateProducts($product_id);
function lfGetRelateProducts($tmp_id) {
$objQuery = new SC_Query;
//自動抽出
$objQuery->setorder(“random()”);
//表示件数の制限
$objQuery->setlimit(RELATED_PRODUCTS_MAX);
$temp_limit = RELATED_PRODUCTS_MAX;
//検索条件
$sql = “SELECT
A.product_id,B.name,B.main_list_image,B.price01_min, B.price02_min, B.price01_max, B.price02_max,
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,
deliv_date_id,
create_date,
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.deliv_date_id,
T0.create_date,
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,
del_flg AS class_del_flg
FROM dtb_products_class WHERE del_flg = ‘0’ 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 6;”;
//結果の取得
// $arrProducts = $objQuery->select($col, $from, $where, $arrval);
$arrProducts = $objQuery->getall($sql);
var_dump($arrProducts);
return $arrProducts;
}
コメントを残す