2012年3月15日カテゴリー:

EC-CUBE:最近チェックした商品を表示する

下記書籍をもとに書いています。詳しくは、本をお読みください。

PCでは、jQuery.carouFredSel(http://caroufredsel.frebsite.nl/)を利用して表示する。
また、横スライド用と縦スライド用を用意し、メインブロックへの配置、サイドブロックへの配置に対応する。

3カラムの時(左右にスライド)

2カラムの時(左右にスライド)

サイドに配置した時(上下にスライド)(3カラム、2カラム共通)

1 データベースに登録

(1)会員ユーザーが見た商品を登録するためのdtb_recent_productテーブルを作成する。
——————————————
名前:dtb_recent_product フィールド数:3

フィールド:customer_id
種別:INT
長さ:11
ヌル:チェックしない

フィールド:product_id
種別:INT
長さ:11
ヌル:チェックしない

フィールド:create_date
種別:DATETIME
ヌル:チェックしない
——————————————

(2)最近チェックした商品の表示数を設定する定数をmtb_constantsテーブルに登録する。
——————————————
id:DISP_RECENT_PRODUCT
name:10(←定数)
rank:1241(←適宜)
remarks:最近チェックした商品の表示数
——————————————

★ システム設定>パラメーター設定を開き、「この内容で登録する」をクリックする。

2 最近チェックした商品の登録

■ data/class/pages/products/LC_Page_Products_Detail.php
 // ログイン判定
if ($objCustomer->isLoginSuccess() === true){}内に追加する。

[php]
//最近チェックした商品として登録する
$this->lfRegistRecentProduct($product_id,$objCustomer->getValue(‘customer_id’));
[/php]

 一番下 lfRegistFavoriteProductメソッドの次に追加する。

[php]
function lfRegistRecentProduct($product_id,$customer_id) {
$objQuery =& SC_Query_Ex::getSingletonInstance();

//既に同じ会員に同じ商品が登録されているか
$count = $objQuery->count(“dtb_recent_product”,”product_id = ? and customer_id = ?”,array($product_id,$customer_id));

//同じ商品が登録されていれば更新
if($count >0){
$objQuery->update(“dtb_recent_product”,array(“create_date”=>’now()’),”product_id = ? and customer_id = ?”,array($product_id,$customer_id));
}else{

//登録数を取得
$maxcount = $objQuery->count(“dtb_recent_product”,”customer_id = ?”,array($customer_id,));
//最大表示数異常であれば一番古い履歴を削除してから登録
if($maxcount>=DISP_RECENT_PRODUCT){
$objQuery->delete(“dtb_recent_product”,”customer_id = ? order by create_date limit 1″,array($customer_id));
}
$objQuery->insert(“dtb_recent_product”,array(“product_id”=>$product_id,”customer_id”=>$customer_id,”create_date”=>”now()”));
}
}
[/php]

3 最近チェックした商品を表示するためにブロックを作成する。

(1)データ取得のための拡張ファイル等を新規作成
 ■html/frontparts/bloc/recent_products.php
 ■data/class_extends/page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_Recent_Products_Ex.php
 ■data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Recent_Products.php

【縦スライド用】上記のファイルをコピーして作成。(コードに「_Vertical」を追加すること)
① ■html/frontparts/bloc/recent_products_vertical.php
② ■data/class_extends/page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_Recent_Products_Vertical_Ex.php
③ ■data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Recent_Products_Vertical.php

(2)データベースのdtb_blocにPC用(device_type_id=10)、携帯用(device_type_id=1)、スマートフォン用(device_type_id=2)のブロックを登録する。
PC用
——————————————
device_type_id:10
bloc_id:12(環境に応じて)
bloc_name:最近チェックした商品(横スライド)
tpl_path:recent_products.tpl
filename:recent_products
create_date:作成日時
update_date:作成日時
php_path:frontparts/bloc/recent_products.php
deletable_flg:0
——————————————
device_type_id:10
bloc_id:15(環境に応じて)
bloc_name:最近チェックした商品(縦スライド)
tpl_path:recent_products_vertical.tpl
filename:recent_products_vertical
create_date:作成日時
update_date:作成日時
php_path:frontparts/bloc/recent_products_vertical.php
deletable_flg:0
——————————————

携帯用
——————————————
device_type_id:1
bloc_id:7(環境に応じて)
bloc_name:最近チェックした商品
tpl_path:recent_products.tpl
filename:recent_products
create_date:作成日時
update_date:作成日時
php_path:frontparts/bloc/recent_products.php
deletable_flg:0
——————————————

スマートフォン用
——————————————
device_type_id:2
bloc_id:10(環境に応じて)
bloc_name:最近チェックした商品
tpl_path:recent_products.tpl
filename:recent_products
create_date:作成日時
update_date:作成日時
php_path:frontparts/bloc/recent_products.php
deletable_flg:0
——————————————

(3)PC用のテンプレートを作成する
 jQuery.carouFredSel(http://caroufredsel.frebsite.nl/)を適用する。
■html/js/jquery.caroufredsel/jquery.carouFredSel-5.5.0-packed.js
■html/js/jquery.caroufredsel/miscellaneous_sprite.png

■data/Smarty/templates/default/site_frame.tplに追加

[php]


[/php]

テンプレートファイルを作成する

横スライド用 ■data/Smarty/templates/default/frontparts/bloc/recent_products.tpl

[php]

最近チェックした商品


[/php]

縦スライド用 ■data/Smarty/templates/default/frontparts/bloc/recent_products_vertical.tpl

[php]

最近チェックした商品

[/php]

 CSSを適用する
■data/user_data/packages/default/css/bloc.cssに追加

ブロックを配置する場所によっては、レイアウトが崩れる場合もあるので、