商品一覧ブロックを作成する
1.html/frontparts/bloc/product_list.php を新規作成
<?php // {{{ requires require_once(CLASS_EX_REALDIR . "page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_Product_List_Ex.php"); // }}} // {{{ generate page $objPage = new LC_Page_FrontParts_Bloc_Product_List_Ex(); register_shutdown_function(array($objPage, "destroy")); $objPage->init(); $objPage->process(); ?>
2.data/class_extends/page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_Product_List_Ex.php を新規作成
<?php // {{{ requires require_once(CLASS_REALDIR . "pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Product_List.php"); /** * product_List のページクラス(拡張). * * LC_Page_FrontParts_Bloc_Product_List をカスタマイズする場合はこのクラスを編集する. * */ class LC_Page_FrontParts_Bloc_Product_List_Ex extends LC_Page_FrontParts_Bloc_Product_List { // }}} // {{{ functions /** * Page を初期化する. * * @return void */ function init() { parent::init(); } /** * Page のプロセス. * * @return void */ function process() { parent::process(); } /** * デストラクタ. * * @return void */ function destroy() { parent::destroy(); } } ?>
3.data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Product_List.php を新規作成
<?php // {{{ requires require_once CLASS_REALDIR . 'pages/frontparts/bloc/LC_Page_FrontParts_Bloc.php'; /** * Product_List のページクラス. * * @package Page */ class LC_Page_FrontParts_Bloc_Product_List extends LC_Page_FrontParts_Bloc { // }}} // {{{ functions /** * Page を初期化する. * * @return void */ function init() { parent::init(); $bloc_file = 'product_list.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(); } $objQuery = new SC_Query_Ex(); $objProduct = new SC_Product_Ex(); //$objQuery->setLimitOffset(10); //$objQuery->setOrder("update_date desc"); $this->arrProducts = $objProduct->lists(&$objQuery); $objView->assignobj($this); $objView->display($this->tpl_mainpage); } /** * デストラクタ. * * @return void */ function destroy() { parent::destroy(); } } ?>
$this->arrProducts を定義するところの上にコメントアウトされた行がありますが、
その1行目は「10件のみ取り出す」、2行目は「update_date(更新日時)の降順に並べる」という意味です。
コメント記号を削除すれば、「更新があった商品リスト(最新10件)」にもなりそうです。
4.data/Smarty/templates/default/frontparts/bloc/product_list.tpl を新規作成
<style type="text/css"> div#productlist_area h2 { background-color:#de5e17; text-align:center; color:#fff; padding:7px 0 7px 0; } div#productlist_area div.productImage { float:left; width:40px; padding:0 8px 0 0; } div#productlist_area div.productContents { float:left; width:100px; } div#productlist_area div.product_item { padding:5px 0 5px 5px; } </style> <!--{if count($arrProducts) > 0}--> <div class="bloc_outer clearfix"> <div id="productlist_area"> <h2>商品一覧リスト</h2> <div class="bloc_body clearfix"> <!--{foreach from=$arrProducts item=arrProduct}--> <div class="product_item clearfix"> <div class="productImage"> <a href="<!--{$smarty.const.P_DETAIL_URLPATH}--><!--{$arrProduct.product_id|u}-->"><img src="<!--{$smarty.const.ROOT_URLPATH}-->resize_image.php?image=<!--{$arrProduct.main_list_image|sfNoImageMainList|h}-->&width=40&height=40" alt="<!--{$arrProduct.name|h}-->" /></a> </div> <div class="productContents"> <h3> <a href="<!--{$smarty.const.P_DETAIL_URLPATH}--><!--{$arrProduct.product_id|u}-->"><!--{$arrProduct.name|h}--></a> </h3> <p class="sale_price"> <span class="price"><!--{$arrProduct.price02_min|sfCalcIncTax:$arrInfo.tax:$arrInfo.tax_rule|number_format}--> 円</span> </p> </div> </div> </dl> <div class="clear"></div> <!--{/foreach}--> </div> </div> </div> <!--{/if}-->
5.データベースに新規ブロック情報を登録
insert into dtb_bloc values(10,10,’product_list’,’product_list.tpl’,’product_list’,now(),now(),’frontparts/bloc/product_list.php’,0);
6.特定のカテゴリだけ表示する場合・・・
3.data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Product_List.php を新規作成
箇所を下記とする
<?php // {{{ requires require_once CLASS_REALDIR . 'pages/frontparts/bloc/LC_Page_FrontParts_Bloc.php'; /** * Product_List のページクラス. * * @package Page */ class LC_Page_FrontParts_Bloc_Product_List extends LC_Page_FrontParts_Bloc { // }}} // {{{ functions /** * Page を初期化する. * * @return void */ function init() { parent::init(); $bloc_file = 'product_list.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(); } $objQuery = new SC_Query_Ex(); // 商品一覧を取得 $col = 'T1.product_id, T1.main_list_image, T1.name, T2.price02 AS price02_min'; $from = 'dtb_products as T1 INNER JOIN dtb_products_class as T2 ON T1.product_id = T2.product_id'; $from .= ' INNER JOIN dtb_product_categories as T3 ON T1.product_id = T3.product_id'; $where = 'T2.del_flg = 0 and T3.category_id IN ( ? , ? )'; // $arrval で指定するカテゴリIDの数だけ ? を増やす $arrval = Array( 4 , 6 ); // 一番下層のカテゴリIDを指定する //$objQuery->setOrder("T1.update_date desc"); $arrProducts = $objQuery->select($col, $from, $where, $arrval); // 重複データ削除 $tmp = Array(); $i = 0; $max_count = 10; // 取得したい商品個数を指定する foreach($arrProducts as $arrProduct){ if(!in_array($arrProduct['product_id'], $tmp)){ $this->arrProducts[$i] = $arrProduct; $i++; } $tmp[] = $arrProduct['product_id']; if($i >= $max_count){ break; } } $objView->assignobj($this); $objView->display($this->tpl_mainpage); } /** * デストラクタ. * * @return void */ function destroy() { parent::destroy(); } } ?>