EC-CUBE おしゃれなECサイトのスクロールする買い物カゴの設置
jQuery Sticky Sidebarのダウンロードと設置
まずは、jQuery Sticky Sidebarのダウンロードから。
Sticky Sidebar jQuery plugin | Phil Parsons
ダウンロード後、解凍、そしてECCUBEにアップとなります。
解凍したフォルダのjsフォルダにある3ファイル。
jquery.easing.1.3.js
stickysidebar.jquery.js
stickysidebar.jquery.min.js
↓
ECCUBEの /html/js へアップロード
そして、ECCUBEの管理画面より
デザイン管理-PC-ブロック設定 の画面に行き、新しくブロックを登録。
ブロック名:スクロールかご(なんでもいいです)
ファイル名:cart2(なんでもいいです)
ファイルの中身(参考として使って下さい。CSSとか無視してます)
<!--{* カゴ商品詳細表示 *}-->
<div id="basket">
<div class="basket_f clearfix">
<h2>カゴに入っている商品</h2>
<ul>
<!--{section name=cnt loop=$arrCartList step=-1 max=12}-->
<!--{if $arrCartList[cnt].productsClass.name != ''}-->
<li class="basket_in">
<img src="<!--{$smarty.const.ROOT_URLPATH}-->resize_image.php?image=<!--{$arrCartList[cnt].productsClass.main_list_image|sfNoImageMainList|h}-->&width=60&height=60" />
<br>個数:<!--{$arrCartList[cnt].quantity}-->
</li>
<!--{/if}-->
<!--{/section}-->
</ul>
</div>
<p class="cart_price">合計<span class="atten"><!--{$arrCartList.0.ProductsTotal|number_format|default:0}--></span>円</p>
<div class="cart_bt"><a href="<!--{$smarty.const.CART_URLPATH}-->">精算する</a></div>
</div>
<script type="text/javascript" src="<!--{$smarty.const.ROOT_URLPATH}-->js/stickysidebar.jquery.js"></script>
<script>
$(function () {
$("#basket").stickySidebar({
timer: 100,
easing: "linear",
speed :100,
padding :50
});
});
</script>
もう一度、管理画面よりデザイン管理-PC-レイアウト設定 の画面に行きます。
下部より商品一覧ページのレイアウト編集に切り替え、新しく作ったブロックをヘッダー部の【ヘッダー】ログインの下に配置。
これで表示はされるはずです。商品一覧ページをご覧ください。
※デフォルト状態ならば、食品カテゴリーでもみてみましょう。
右上に、ちらちら動くものが見えるはずです。
画像も空欄としてふわふわしています。
それはいいとして、スクロールしてついてくれば、第一段階終了です。
カゴとしての計算機能を機能させる
見た目は出来ましたが、中身は空っぽです。
商品なんかも入ったりしません。
なので、次の工程はPHPファイルを3つ作製します。
/data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Cart2.php を作成
<?php
// {{{ requires
require_once CLASS_REALDIR . 'pages/frontparts/bloc/LC_Page_FrontParts_Bloc.php';
/**
* カート のページクラス.
*
* @package Page
* @author LOCKON CO.,LTD.
* @version $Id:LC_Page_FrontParts_Bloc_Cart.php 15532 2007-08-31 14:39:46Z nanasess $
*/
class LC_Page_FrontParts_Bloc_Cart2 extends LC_Page_FrontParts_Bloc {
// }}}
// {{{ functions
/**
* Page を初期化する.
*
* @return void
*/
function init() {
parent::init();
$masterData = new SC_DB_MasterData_Ex();
$this->arrProductType = $masterData->getMasterData("mtb_product_type"); //商品種類を取得
}
/**
* Page のプロセス.
*
* @return void
*/
function process() {
$this->action();
$this->sendResponse();
}
/**
* Page のアクション.
*
* @return void
*/
function action() {
$objCart = new SC_CartSession_Ex();
$this->isMultiple = $objCart->isMultiple();
$this->hasDownload = $objCart->hasProductType(PRODUCT_TYPE_DOWNLOAD);
$this->arrCartList = $this->lfGetCartData($objCart);
}
/**
* デストラクタ.
*
* @return void
*/
function destroy() {
parent::destroy();
}
/**
* カートの情報を取得する
*
* @param SC_CartSession $objCart カートセッション管理クラス
* @return array $arrCartList カートデータ配列
*/
function lfGetCartData(&$objCart) {
$arrCartKeys = $objCart->getKeys();
foreach ($arrCartKeys as $cart_key) {
// カート情報を取得
$arrCartList = $objCart->getCartList($cart_key);
// カート内の商品ID一覧を取得
$arrAllProductID = $objCart->getAllProductID($cart_key);
// 商品が1つ以上入っている場合には商品名称を取得
if (count($arrCartList) > 0){
foreach($arrCartList['productsClass'] as $key => $val){
$arrCartList[$key]['product_name'] = $val['name'];
}
}
// 購入金額合計
$products_total += $objCart->getAllProductsTotal($cart_key);
// 合計数量
$total_quantity += $objCart->getTotalQuantity($cart_key);
// 送料無料チェック
if (!$this->isMultiple && !$this->hasDownload) {
$is_deliv_free = $objCart->isDelivFree($cart_key);
}
}
$arrCartList[0]['ProductsTotal'] = $products_total;
$arrCartList[0]['TotalQuantity'] = $total_quantity;
// 店舗情報の取得
$arrInfo = SC_Helper_DB_Ex::sfGetBasisData();
$arrCartList[0]['free_rule'] = $arrInfo['free_rule'];
// 送料無料までの金額
if ($is_deliv_free) {
$arrCartList[0]['deliv_free'] = 0;
} else {
$deliv_free = $arrInfo['free_rule'] - $products_total;
$arrCartList[0]['deliv_free'] = $deliv_free;
}
return $arrCartList;
}
}
?>
/data/class_extends/page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_Cart_Ex2.php を作成
<?php
// {{{ requires
require_once CLASS_REALDIR . 'pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Cart2.php';
/**
* カート のページクラス(拡張).
*
* LC_Page_カート をカスタマイズする場合はこのクラスを編集する.
*
* @package Page
* @author LOCKON CO.,LTD.
* @version $Id: LC_Page_FrontParts_Bloc_Cart_Ex.php 20764 2011-03-22 06:26:40Z nanasess $
*/
class LC_Page_FrontParts_Bloc_Cart_Ex2 extends LC_Page_FrontParts_Bloc_Cart2 {
// }}}
// {{{ functions
/**
* Page を初期化する.
*
* @return void
*/
function init() {
parent::init();
}
/**
* Page のプロセス.
*
* @return void
*/
function process() {
parent::process();
}
/**
* デストラクタ.
*
* @return void
*/
function destroy() {
parent::destroy();
}
}
?>
html/frontparts/bloc/cart2.php を作成
<?php
// {{{ requires
require_once realpath(dirname(__FILE__)) . '/../../require.php';
require_once CLASS_EX_REALDIR . 'page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_Cart_Ex2.php';
// }}}
// {{{ generate page
$objPage = new LC_Page_FrontParts_BLoc_Cart_Ex2();
$objPage->blocItems = $params['items'];
register_shutdown_function(array($objPage, "destroy"));
$objPage->init();
$objPage->process();
?>
</code>
最後にデータベースにアクセスし、テーブルdtb_blocにアクセス。
bloc_name『スクロールかご』というデータがあるので、編集。
あとは「php_path」を「frontparts/bloc/cart2.php」に設定して終了(画像参照)。

以上で完成です。
テストとしてカゴに商品を入れてみましょう。
画像付きで追加されるはずです。
CSSで成形
もう少しです。CSSで見やすくしたらフィニッシュです。
※以下のCSSは参考までです。たいしたものではないので、そのまま使うよりカスタマイズした方が身のためです。
/* 動く買い物かご
----------------------------------------------- */
#basket {
background-color: #FFFFFF;
border: 1px solid #FF9900;
margin-right: 10px;
padding: 8px 5px 8px 3px;
position: absolute;
right: 10px;
top: 90px;
width: 150px;
}
li.basket_in {
background-color: #FFFFFF;
border: 1px solid #CCCCCC;
float: left;
margin: 8px 0 5px 9px;
width: 60px;
}
#basket .cart_price {
background: url("../img/background/line_dot_01.gif") repeat-x scroll center top transparent;
clear: both;
margin: 3px 0 7px;
padding-top: 3px;
}
#basket .atten {
font-weight: bold;
margin: 0 2px;
}
#basket .cart_bt{
background-color: #f98b3e;
padding:5px;
margin:0 25px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
/*IE 7 AND 8 DO NOT SUPPORT BORDER RADIUS*/
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f98b3e', endColorstr='#df4a06',GradientType=0 ); /* ie */
background-image: -moz-linear-gradient(top, #f98b3e, #df4a06);
background-image: -ms-linear-gradient(top, #f98b3e, #df4a06);
background-image: -o-linear-gradient(top, #f98b3e, #df4a06);
background-image: -webkit-gradient(linear, center top, center bottom, from(#f98b3e), to(#df4a06));
background-image: -webkit-linear-gradient(top, #f98b3e, #df4a06);
background-image: linear-gradient(top, #f98b3e, #df4a06);
-moz-background-clip: padding;
-webkit-background-clip: padding-box;
background-clip: padding-box;
}
#basket .cart_bt a{
color:#fff;
font-weight:bold;
}
総括
以上で完成となります。
CSSは改良の余地ありですね。
結構、奇怪な動きをしたりするので。
ECCUBEでは今回のようにPHPと連動したものを追加する場合、ファイルを複数追加する事が多いです。
ファイル名が間違ってるだけで動かなかったり、面倒な事が多いです。
自分も完全に理解しているところではないので、コピペですまして、なんとか動くようにしています。
わからなくても、動かせればいいんです。
便利なECサイトの機能として満足してもらえばいいのです。
そして、お金になればいいのです。
というような感覚で自分はECサイトと向き合っています。
目指したものは、アスクルの販売サイトだったのですが、まだ足りず。
色々な意見が欲しいところです。
