■レビュー一覧ページをページング対応
前回作成したレビュー一覧ページだと登録されている全データが表示されるため
データが増えるとページが重たくなったりページが縦長になるのでページング処理を
導入してカスタマイズする
手順: レビュー情報取得処理をページング対応に実装する テンプレートにページャーを表示させる処理を実装する
■レビュー情報取得処理をページング対応に実装する
define('REVIEW_DISP_NUMBER', 10); // レビューページの表示件数
表示件数のデフォルト値をdefineにて定義
/** * Page のアクション. * * @return void */ function action() { // レビュー情報を取得 $this->arrReview = $this->lfGetReviewData(); } /** * 商品毎のレビュー情報を取得する * * @return レビュー情報 */ function lfGetReviewData() { // パラメーター管理クラス $objFormParam = new SC_FormParam_Ex(); // パラメーター情報の初期化 $this->lfInitParam($objFormParam); // 値の設定 $objFormParam->setParam($_REQUEST); // 入力値の変換 $objFormParam->convParam(); // 値の取得 $this->arrForm = $objFormParam->getHashArray(); // 現在のページを取得 $this->tpl_pageno = $this->arrForm['pageno']; // 有効レビュー件数を取得 $objQuery =& SC_Query_Ex::getSingletonInstance(); $this->tpl_linemax = $objQuery->count("dtb_review", "del_flg = 0 AND status = 1 ORDER BY create_date DESC"); // 表示件数 $this->disp_number = $this->lfGetDisplayNum($this->arrForm['disp_number']); $urlParam = "pageno=#page#"; // モバイルの場合に検索条件をURLの引数に追加 if (SC_Display_Ex::detectDevice() === DEVICE_TYPE_MOBILE) { $urlParam .= "&mode={$this->mode}"; } $objNavi = new SC_PageNavi_Ex( $this->tpl_pageno, $this->tpl_linemax, $this->disp_number, 'return;', NAVI_PMAX, $urlParam, SC_Display_Ex::detectDevice() !== DEVICE_TYPE_MOBILE ); // ページナビをアサイン $strnavi = $objNavi->strnavi; $this->tpl_strnavi = empty($strnavi)?' ':$strnavi; // 商品ごとのレビュー情報を取得する $objQuery->setLimitOffset($this->disp_number, $objNavi->start_row); $col = "t1.create_date, t1.reviewer_url, t1.reviewer_name, t1.recommend_level, t1.title, t1.comment, t2.product_id, t2.name, t2.main_list_image"; $from = "dtb_review as t1 left join dtb_products as t2 using (product_id)"; $where = "t1.del_flg = 0 AND t1.status = 1 ORDER BY t1.create_date DESC"; $arr_review = $objQuery->select($col, $from, $where, $arrval); return $arr_review; } /** * パラメーター情報の初期化 * * @param array $objFormParam フォームパラメータークラス * @return void */ public function lfInitParam(&$objFormParam) { // 抽出条件 $objFormParam->addParam('ページ番号', 'pageno', INT_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK')); } /** * パラメーターの読み込み * * @return void */ public function lfGetDisplayNum($display_number) { // 表示件数 return (SC_Utils_Ex::sfIsInt($display_number)) ? $display_number : REVIEW_DISP_NUMBER; }
今後の拡張も考えてlfInitParam関数でフォームパラメーター管理する 表示件数の制御や表示順の変更等
■テンプレートにページャーを表示させる処理を実装する
<div class="navi"><!--{$tpl_strnavi}--></div> <h2>レビュー一覧</h2> <!--{if count($arrReview) > 0}--> <ul> <!--{section name=cnt loop=$arrReview}--> <li> <a href="<!--{$smarty.const.P_DETAIL_URLPATH}--><!--{$arrReview[cnt].product_id|u}-->"> <img src="<!--{$smarty.const.ROOT_URLPATH}-->resize_image.php?image=<!--{$arrReview[cnt].main_list_image|sfNoImageMainList|h}-->&width=120&height=120" alt="<!--{$arrReview[cnt].name|h}-->" /> </a> <a href="<!--{$smarty.const.HTTP_URL}-->products/detail<!--{$arrReview[cnt].product_id|u}-->.php"><!--{$arrReview[cnt].name|h}--></a> <p class="voicetitle"><!--{$arrReview[cnt].title|h}--></p> <p class="voicedate"><!--{$arrReview[cnt].create_date|sfDispDBDate:false}--> 投稿者:<!--{if $arrReview[cnt].reviewer_url}--><a href="<!--{$arrReview[cnt].reviewer_url}-->" target="_blank"><!--{$arrReview[cnt].reviewer_name|h}--></a><!--{else}--><!--{$arrReview[cnt].reviewer_name|h}--><!--{/if}--> おすすめレベル:<span class="recommend_level"><!--{assign var=level value=$arrReview[cnt].recommend_level}--><!--{$arrRECOMMEND[$level]|h}--></span></p> <p class="voicecomment"><!--{$arrReview[cnt].comment|h|nl2br}--></p> </li> <hr /> <!--{/section}--> </ul> <!--{/if}--> <div class="navi"><!--{$tpl_strnavi}--></div>