WEBサイト作成時に発生するエラーやトラブル対応の備忘録を中心に、いろいろと書いております。


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

下記ページを参考にさせていただきました。多謝。

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;

}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください