EC-CUBE2を使用したショッピングサイトの改修を行っております。
そこで「○○円~○○円」といった価格での範囲検索の実装をしようと思っております。
一応参考サイトがあったのでそちらを参考にしましたがなかなかうまくいかずに困っています。
【EC-CUBE2.13】商品名、カテゴリ、キーワード、価格帯、商品ステータス、規格で絞り込み検索ができる条件指定検索フォームページを作成
リンク内容
実際に記述したコードがこちらです。
検索は
/data/class/pages/products/LC_Page_Products_List.phpに元からあったものに追記した形になります。
PHP
1 public function lfInitParam(&$objFormParam) 2 { 3 // 抽出条件 4 // XXX カートインしていない場合、チェックしていない 5 $objFormParam->addParam('カテゴリID', 'category_id', INT_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK')); 6 $objFormParam->addParam('メーカーID', 'maker_id', INT_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK')); 7 $objFormParam->addParam('商品名', 'name', STEXT_LEN, 'KVa', array('MAX_LENGTH_CHECK')); 8 $objFormParam->addParam('表示順序', 'orderby', STEXT_LEN, 'KVa', array('MAX_LENGTH_CHECK')); 9 $objFormParam->addParam('ページ番号', 'pageno', INT_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK')); 10 $objFormParam->addParam('表示件数', 'disp_number', INT_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK')); 11 $objFormParam->addParam('価格帯(下限)', 'price_range_lower', INT_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK')); 12 $objFormParam->addParam('価格帯(上限)', 'price_range_upper', INT_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK')); 13 14 // カートイン 15 $objFormParam->addParam('規格1', 'classcategory_id1', INT_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK')); 16 $objFormParam->addParam('規格2', 'classcategory_id2', INT_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK')); 17 $objFormParam->addParam('数量', 'quantity', INT_LEN, 'n', array('EXIST_CHECK', 'ZERO_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK')); 18 $objFormParam->addParam('商品ID', 'product_id', INT_LEN, 'n', array('ZERO_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK')); 19 $objFormParam->addParam('商品規格ID', 'product_class_id', INT_LEN, 'n', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK')); 20 } 21 22~ 23 24 /* 商品一覧の表示 */ 25 26 /** 27 * @param SC_Product_Ex $objProduct 28 */ 29 public function lfGetProductsList($searchCondition, $disp_number, $startno, &$objProduct) 30 { 31 $objQuery =& SC_Query_Ex::getSingletonInstance(); 32 33 $arrOrderVal = array(); 34 35 $colName = ''; 36 $tblName = ''; 37 38 // 表示順序 39 switch ($this->orderby) { 40 // 販売価格が安い順 41 case 'price': 42 $objProduct->setProductsOrder('price02', 'dtb_products_class', 'ASC'); 43 $colName = 'price02'; 44 $tblName = 'dtb_products_class'; 45 break; 46 47 // 新着順 48 case 'date': 49 $objProduct->setProductsOrder('create_date', 'dtb_products', 'DESC'); 50 $colName = 'create_date'; 51 $tblName = 'dtb_products'; 52 break; 53 54 // 売価順 55 case 'selling_price': 56 $objProduct->setProductsOrder('price01', 'dtb_products_class', 'DESC'); 57 $colName = 'price01'; 58 $tblName = 'dtb_products_class'; 59 break; 60 61 // 利益率順 62 case 'profit_late': 63 $objProduct->setProductsOrder('point_rate', 'dtb_products_class', 'DESC'); 64 $colName = 'point_rate'; 65 $tblName = 'dtb_products_class'; 66 break; 67 68 // 数量順 69 case 'quantity': 70 $objProduct->setProductsOrder('comment5', 'dtb_products', 'DESC'); 71 $colName = 'comment5'; 72 $tblName = 'dtb_products'; 73 break; 74 75 // 数量順 76 case 'orderby_asc': 77 $objProduct->setProductsOrder($colName, $tblName, 'ASC'); 78 break; 79 80 // 数量順 81 case 'orderby_desc': 82 $objProduct->setProductsOrder($colName, $tblName, 'DESC'); 83 break; 84 85 default: 86 if (strlen($searchCondition['where_category']) >= 1) { 87 $dtb_product_categories = '(SELECT * FROM dtb_product_categories WHERE '.$searchCondition['where_category'].')'; 88 $arrOrderVal = $searchCondition['arrvalCategory']; 89 } else { 90 $dtb_product_categories = 'dtb_product_categories'; 91 } 92 $col = 'MAX(T3.rank * 2147483648 + T2.rank)'; 93 $from = "$dtb_product_categories T2 JOIN dtb_category T3 ON T2.category_id = T3.category_id"; 94 $where = 'T2.product_id = alldtl.product_id'; 95 $sub_sql = $objQuery->getSql($col, $from, $where); 96 97 $objQuery->setOrder("($sub_sql) DESC ,product_id DESC"); 98 break; 99 } 100 101 102~ 103 // 取得範囲の指定(開始行番号、行数のセット) 104 $objQuery->setLimitOffset($disp_number, $startno); 105 $objQuery->setWhere($searchCondition['where']); 106 107 // 表示すべきIDとそのIDの並び順を一気に取得 108 $arrProductId = $objProduct->findProductIdsOrder($objQuery, array_merge($searchCondition['arrval'], $arrOrderVal)); 109 110 $objQuery =& SC_Query_Ex::getSingletonInstance(); 111 $arrProducts = $objProduct->getListByProductIds($objQuery, $arrProductId); 112 113 // 規格を設定 114 $objProduct->setProductsClassByProductIds($arrProductId); 115 $arrProducts['productStatus'] = $objProduct->getProductStatus($arrProductId); 116 117 return $arrProducts; 118 } 119 120 121~ 122 123/** 124 * 表示用検索条件の設定 125 * 126 * @return array 127 */ 128 public function lfGetSearchConditionDisp($arrSearchData) 129 { 130 $objQuery =& SC_Query_Ex::getSingletonInstance(); 131 $arrSearch = array('category' => '指定なし', 'maker' => '指定なし', 'name' => '指定なし' , 'price_range_lower' => '指定なし', 'price_range_upper' => '指定なし'); 132 // カテゴリ検索条件 133 if ($arrSearchData['category_id'] > 0) { 134 $arrSearch['category'] = $objQuery->get('category_name', 'dtb_category', 'category_id = ?', array($arrSearchData['category_id'])); 135 } 136 137 // メーカー検索条件 138 if (strlen($arrSearchData['maker_id']) > 0) { 139 $objMaker = new SC_Helper_Maker_Ex(); 140 $maker = $objMaker->getMaker($arrSearchData['maker_id']); 141 $arrSearch['maker'] = $maker['name']; 142 } 143 144 // 商品名検索条件 145 if (strlen($arrSearchData['name']) > 0) { 146 $arrSearch['name'] = $arrSearchData['name']; 147 } 148 149 // 価格帯検索条件 150 if(strlen($arrSearchData['price_range_lower']) > 0){ 151 $arrSearch['price_range_lower'] = $arrSearchData['price_range_lower']; 152 } 153 if(strlen($arrSearchData['price_range_upper']) > 0){ 154 $arrSearch['price_range_upper'] = $arrSearchData['price_range_upper']; 155 } 156 157 158 return $arrSearch; 159 } 160 161 162~ 163 164 $dump = $arrSearchData['price_range_lower']; 165 $tmpWhere = ""; 166 if ($arrSearchData['price_range_lower'] > 0) { 167 $tmpWhere .= " AND price02 >= ? "; 168 $searchCondition['arrval'][] = $arrSearchData['price_range_lower']; 169 } 170 // 上限 171 if ($arrSearchData['price_range_upper'] > 0) { 172 $tmpWhere .= " AND price02 <= ? "; 173 $searchCondition['arrval'][] = $arrSearchData['price_range_upper']; 174 } 175 176 if (strlen($tmpWhere) > 0) { 177 $searchCondition['where'] .= ' AND alldtl.product_id IN (' 178 . 'SELECT product_id FROM dtb_products_class ' 179 . 'WHERE product_id = alldtl.product_id AND del_flg = 0' 180 . $tmpWhere 181 . 'GROUP BY product_id' 182 . ')'; 183 } 184 185
list.php はこちらです。
PHP
1 <form name="form1" id="form1" method="get" action="?"> 2 <input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" /> 3 <input type="hidden" name="mode" value="<!--{$mode|h}-->" /> 4 <!--{* ▼検索条件 *}--> 5 <input type="hidden" name="category_id" value="<!--{$arrSearchData.category_id|h}-->" /> 6 <input type="hidden" name="maker_id" value="<!--{$arrSearchData.maker_id|h}-->" /> 7 <input type="hidden" name="name" value="<!--{$arrSearchData.name|h}-->" /> 8 <input type="hidden" name="price_range_lower" value="<!--{$arrSearchData.price_range_lower|h}-->" /> 9 <input type="hidden" name="price_range_upper" value="<!--{$arrSearchData.price_range_upper|h}-->" /> 10 11 <!--{* ▲検索条件 *}--> 12 <!--{* ▼ページナビ関連 *}--> 13 <input type="hidden" name="orderby" value="<!--{$orderby|h}-->" /> 14 <input type="hidden" name="disp_number" value="<!--{$disp_number|h}-->" /> 15 <input type="hidden" name="pageno" value="<!--{$tpl_pageno|h}-->" /> 16 <!--{* ▲ページナビ関連 *}--> 17 <input type="hidden" name="rnd" value="<!--{$tpl_rnd|h}-->" /> 18 </form> 19 20~ 21 22 <!--検索フォーム--> 23 <!--{strip}--> 24 25 <form name="advanced_search_form" id="advanced_search_form" method="get" action="<!--{$smarty.const.ROOT_URLPATH}-->products/list.php"> 26 <input name="mode" value="search" type="hidden"> 27 <input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" /> 28 価格帯 29 <input type="number" name="price_range_lower" class="box140" maxlength="50" value="<!--{$smarty.get.price_range_lower|h}-->" /> 30 ~ 31 <input type="number" name="price_range_upper" class="box140" maxlength="50" value="<!--{$smarty.get.price_range_upper|h}-->" /> 32 円 33 <button type="submit" class="hover_change_image btn" name="search">検索</button> 34 </form> 35 </div> 36 <!--{/strip}-->
一応はURLパラメータに値が入っているのは確認できてはいますが、
絞り込みができません。
何か書き間違いでもあるのでしょうか?
どなたかよろしくお願いいたします。
あなたの回答
tips
プレビュー