新着商品のブロックを表示させる ゴルフ業界の王子様 世界に挑戦

新着商品のブロックを表示させる

EC-CUBEって新着商品の表示が標準でついていないんですヨ。開発元的には、オススメ管理を使って新着商品の案内もやってねということらしいのですが、オススメと書かれている以上、システム使う側としては、最も売りたい商品を表示したい訳で、混在するというのは何かと問題があると思うんですヨ。その事を顧客に話したら、やはり、それでは困るという事で、新商品を追加したら簡単にトップページに掲載できるか調べてみました。

基本的に時限式だと見せたい期間が自由にコントロールできないので、販売戦略をたてる側としては都合が悪いだろうと判断。商品管理画面で、NEWのチェックマークのON、OFFで、トップページに商品を掲載したりしなかったりできる方法を探しました。色々と検索してみたら、色々な方法で新着商品の表示を実現されている方がいたのですが、どれもしっくり来なかったんですヨ。

最後の頼みの綱という訳で、EC-CUBEの開発コミュニティに行ってみたら、「新入荷商品をブロックに表示したい」というスレッドがたっていました。ありましたヨ。自分と同じように新着商品の案内を考えている方が多かったようで、そこで紹介されていた方法が、自分の要求にピッタリでした。早速、組み込むことにしましたヨ。

以下、覚え書きも兼ねて、手順を書いときます。

まず、WebブラウザーからEC-CUBEの管理画面にアクセスし、ログインします。上部のメニューから「デザイン管理」に入ります。そこからさらに「ブロック編集」に入り、新規ブロックを作成します。

ブロック名は新着商品、ファイル名はproductFlag(.tpl)として下さい。現時点では内容の欄は空のままで良いです。登録を押したら、productFlag.tplというファイルがサーバに作成されます。

次は、データベースの作業になります。phpMyAdmin等を使って、EC-CUBEのデータが格納されているデータベースにアクセスして下さい。データベースのテーブル一覧から「dtb_bloc」を選択、編集画面に入って下さい、「新着商品」という項目が作られているので、それを編集します。編集画面に入ると、「php_path」が空欄になってまして、そこに「frontparts/bloc/product_flag.php」と記入します。これで値がNULL値から変更されます。

次に、この「product_flag.php」を作ります。下記のコードをコピーして、エディタ等にペースト、「product_flag.php」と名前を付けて保存します。

<?php
// {{{ requires
require_once(CLASS_EX_PATH . "page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_ProductFlag_Ex.php");
// }}}
// {{{ generate page
$objPage = new LC_Page_FrontParts_Bloc_ProductFlag_Ex();
register_shutdown_function(array($objPage, "destroy"));
$objPage->init();
$objPage->process();
?>

出来上がったファイルを、FTPソフト等を使ってサーバの下記の場所にアップロードします。

/html/frontparts/bloc/product_flag.php

次に、「LC_Page_FrontParts_Bloc_ProductFlag_Ex.php」を作ります。下記のコードをコピーして、エディタ等にペースト、「LC_Page_FrontParts_Bloc_ProductFlag_Ex.php」と名前を付けて保存します。

<?php
// {{{ requires
  require_once(CLASS_PATH . "pages/frontparts/bloc/LC_Page_FrontParts_Bloc_ProductFlag.php");
/**
* productStatus のページクラス(拡張).
*
* LC_Page_FrontParts_Bloc_ProductFlag をカスタマイズする場合はこのクラスを編集する.
*
*/
class LC_Page_FrontParts_Bloc_ProductFlag_Ex extends LC_Page_FrontParts_Bloc_ProductFlag {
 // }}}
// {{{ functions
/**
* Page を初期化する.
*
* @return void
*/
function init() {
parent::init();
}
/**
* Page のプロセス.
*
* @return void
*/
function process() {
parent::process();
}
/**
* デストラクタ.
*
* @return void
*/
function destroy() {
parent::destroy();
}
}
?>

出来上がったファイルを、FTPソフト等を使ってサーバの下記の場所にアップロードします。

/data/class_extends/page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_ProductFlag_Ex.php

次に、「LC_Page_FrontParts_Bloc_ProductFlag.php」を作ります。下記のコードをコピーして、エディタ等にペースト、「LC_Page_FrontParts_Bloc_ProductFlag.php」と名前を付けて保存します。

<?php
// {{{ requires
require_once(CLASS_PATH . "pages/frontparts/bloc/LC_Page_FrontParts_Bloc.php");
/**
* productStatus のページクラス.
*
* @package Page
*/
class LC_Page_FrontParts_Bloc_ProductFlag extends LC_Page_FrontParts_Bloc {
// }}}
// {{{ functions
 /**
* Page を初期化する.
*
* @return void
*/
function init() {
parent::init();
$bloc_file = 'productFlag.tpl';
$this->setTplMainpage($bloc_file);
}
 /**
* Page のプロセス.
*
* @return void
*/
function process() {
if (defined("MOBILE_SITE") && MOBILE_SITE) {
$objView = new SC_MobileView();
} else {
$objView = new SC_SiteView();
}
$objSiteInfo = $objView->objSiteInfo;
// 基本情報を渡す
$objSiteInfo = new SC_SiteInfo();
$this->arrInfo = $objSiteInfo->data;
$objQuery = new SC_Query();
//検索したい商品のステータスを設定
//NEW→1, 残りわずか→2, ポイント2倍→3, オススメ→4, 限定品→5
$productFlag = 1;
//検索する商品のステータスをランダムに決定し、表示させたい場合は以下のコメントを外してください。
//$id_count = $objQuery->count(mtb_status);
//$productFlag = rand(1,$id_count);
 
$this->statusName =$objQuery->get("mtb_status_image", "name", "id={$productFlag}");
 
//表示する商品の件数
$listCount = 8;
 
$ret = "";
$arrTmp[$productFlag] = "1";
 
for($i = 1; $i <= $productFlag; $i++) {
if($arrTmp[$i] == "1") {
$ret.= "1";
} else {
$ret.= "_";
}
}
if($ret != "") {
$ret.= "%";
}
//$col = "dtb_products.product_id, dtb_products.name, dtb_products.main_image,
//MIN(dtb_products_class.price02) AS price02_min, MAX(dtb_products_class.price02) AS price02_max";
//$from = "dtb_products INNER JOIN dtb_products_class using(product_id)";
//$where = "product_flag LIKE \"{$ret}\"";
//$groupby = "product_id";
//$this->groupby=$objQuery->setgroupby($groupby);
//商品の表示はupdate_dateが新しい順
//$order = "dtb_products.update_date DESC";
//$this->order=$objQuery->setorder($order);
$col = "DISTINCT price02_min, product_id, price02_max, main_image, product_flag, name";
$from = "vw_products_allclass AS T1";
$where = "product_flag LIKE '{$ret}'";
//商品の表示はproduct_id逆順
$order = "product_id DESC";
$this->order=$objQuery->setorder($order);
$arrFlagList = $objQuery->select($col, $from, $where);
 
//商品の表示をランダムに抽出する場合は以下のコメントを外してください。
//srand((double)microtime()*1000000);//乱数生成器を初期化
//shuffle($arrFlagList);
$this->arrFlagProducts = array_slice($arrFlagList, 0, $listCount);
$objSubView = new SC_SiteView();
$objSubView->assignobj($this);
$objSubView->display($this->tpl_mainpage);
}
  
/**
* デストラクタ.
*
* @return void
*/
function destroy() {
parent::destroy();
}
}
?>

出来上がったファイルを、FTPソフト等を使ってサーバの下記の場所にアップロードします。

/data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_ProductFlag.php

表示する件数を変更する場合は、下記の部分に書かれた数値を任意の数にする事で変更できます。

//表示する商品の件数
$listCount = 8;

次に、最初に空のまんま作った「新着商品」こと「productFlag.tpl」の中身を作ります。まず、WebブラウザーからEC-CUBEの管理画面の上部のメニューから「デザイン管理」に入り、そこからさらに「ブロック編集」に入ります。同じ「ブロック編集」にある「オススメ商品」の中身をコピーして、「新着商品」にペーストします。次に下記のコード参考に内容を修正してみて下さい。ぶっちゃけ「$arrBestProducts」と書かれた部分を「$arrFlagProducts」に変更すれば動くと思いますが、自分の場合、若干表示がおかしくなったので所々修正してます。下記のコードで表示される情報は、商品写真、商品名、価格のみが表示されるようになっています。後、下記のコードは、装飾用のタグや、CSSのセレクタ名は省いていますので、ご注意下さい。

<!--▼新着商品ここから-->
<!--{if count($arrFlagProducts) > 0}-->
<h2 class="newcommodity">新商品のアダルトグッズ</h2>
<div class="blockconwaku"> 
<!--{section name=cnt loop=$arrFlagProducts step=2}-->
  
<a href="<!--{$smarty.const.URL_DIR}-->products/detail<!--{$arrFlagProducts[cnt].product_id}-->.html">
<!--{if $arrFlagProducts[cnt].main_list_image != ""}-->
<!--{assign var=image_path value="`$arrFlagProducts[cnt].main_list_image`"}-->
<!--{else}-->
<!--{assign var=image_path value="`$smarty.const.NO_IMAGE_DIR`"}-->
<!--{/if}-->
<img src="<!--{$smarty.const.SITE_URL}-->resize_image.php?image=<!--{$arrFlagProducts[cnt].main_image|sfRmDupSlash}-->&width=65&height=65" alt="<!--{$arrFlagProducts[cnt].name|escape}-->" />
</a>
  
<!--{assign var=price01 value=`$arrFlagProducts[cnt].price01_min`}-->
<!--{assign var=price02 value=`$arrFlagProducts[cnt].price02_min`}-->
<h4><a href="<!--{$smarty.const.URL_DIR}-->products/detail<!--{$arrFlagProducts[cnt].product_id}-->.html"><!--{$arrFlagProducts[cnt].name|escape}--></a></h4>
  
価格<span class="font-size-2minus">(税込)</span>:<em class="font-color-red">
<!--{if $price02 == ""}-->
<!--{$price01|sfPreTax:$arrInfo.tax:$arrInfo.tax_rule|number_format}-->
<!--{else}-->
<!--{$price02|sfPreTax:$arrInfo.tax:$arrInfo.tax_rule|number_format}-->
<!--{/if}-->円</em>
  
<span class="font-size-2minus"><!--{$arrFlagProducts[cnt].comment|escape|nl2br}--></span>
  
<!--{assign var=cnt2 value=`$smarty.section.cnt.iteration*$smarty.section.cnt.step-1` }-->
<!--{if $arrFlagProducts[$cnt2]|count > 0}-->
  
<a href="<!--{$smarty.const.URL_DIR}-->products/detail<!--{$arrFlagProducts[$cnt2].product_id}-->.html">
<!--{if $arrFlagProducts[$cnt2].main_list_image != ""}-->
<!--{assign var=image_path value="`$arrFlagProducts[$cnt2].main_list_image`"}-->
<!--{else}-->
<!--{assign var=image_path value="`$smarty.const.NO_IMAGE_DIR`"}-->
<!--{/if}-->
<img src="<!--{$smarty.const.SITE_URL}-->resize_image.php?image=<!--{$arrFlagProducts[$cnt2].main_image|sfRmDupSlash}-->&width=65&height=65" alt="<!--{$arrFlagProducts[$cnt2].name|escape}-->" /></a>
  
<!--{assign var=price01 value=`$arrFlagProducts[$cnt2].price01_min`}-->
<!--{assign var=price02 value=`$arrFlagProducts[$cnt2].price02_min`}-->
<h4><a href="<!--{$smarty.const.URL_DIR}-->products/detail<!--{$arrFlagProducts[$cnt2].product_id}-->.html"><!--{$arrFlagProducts[$cnt2].name|escape}--></a></h4>
  
価格<span class="font-size-2minus">(税込)</span>:<spam class="font-color-red">
<!--{if $price02 == ""}-->
<!--{$price01|sfPreTax:$arrInfo.tax:$arrInfo.tax_rule|number_format}-->
<!--{else}-->
<!--{$price02|sfPreTax:$arrInfo.tax:$arrInfo.tax_rule|number_format}-->
<!--{/if}-->円</span>
<br />

<!--{/if}-->

<!--{/section}-->

<!--{/if}-->

</div>
<!--▲新着商品情報ここまで-->


 

これで、各商品の管理画面から「NEW」のチェックマークをONにすれば、新着商品をトップページに表示する事ができます。

ナカナカ面倒に手順ですけど、必要な場面が多く出てくるので、憶えていて損はないと思いますヨ。

Magnetic@横浜LOGOS 余った食材で簡単料理レシピ HARLEM火曜おなじみRED ZONE!!

SEOリンク集

ビジネス・サービス
お仕事や喜ばれる事業を支援します。
不動産・建築
賃貸物件や工事など建設から販売まで
生活・暮らし
生活に役立つ豆知識や情報など
美容・健康
ダイエット、エステ、スキンケア、サプリメント等
車・バイク・スポーツ
カーチームやパーツ、アウトドアーやサッカー・野球など
ショッピング
通販サイトなどのショッピングサイト
介護・福祉・医療
高齢者や障害者に関わるサイト
グルメ
店舗やグルメ情報サイトなど
ペット
動物病院やショップ、ペットに関わるサイト
学習・教育
学校や習い事などに関するサイト
検索・情報
サーチエンジンや情報サイト
個人・趣味
個人で運営しているサイトや趣味の部屋など
仲間・出会い
サークルや団体など
HP支援・お小遣い
ホームページに関するサイトとアフィリエイトなど