質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

EC-CUBE

EC-CUBEは、主に日本国内で開発されているECコンテンツ管理システムです。ロックオン社のECKitを元にしてオープンソース化され、商品管理・受注管理・顧客管理・売上集計などECに特化した様々な機能を備えています。

Q&A

0回答

1062閲覧

EC-CUBE2 価格帯の範囲検索をしたい

ItoHiroki815

総合スコア8

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

EC-CUBE

EC-CUBEは、主に日本国内で開発されているECコンテンツ管理システムです。ロックオン社のECKitを元にしてオープンソース化され、商品管理・受注管理・顧客管理・売上集計などECに特化した様々な機能を備えています。

0グッド

0クリップ

投稿2019/10/02 01:24

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 2223 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 102103 // 取得範囲の指定(開始行番号、行数のセット) 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 121122 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 162163 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 2021 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}-->" /> 3031 <input type="number" name="price_range_upper" class="box140" maxlength="50" value="<!--{$smarty.get.price_range_upper|h}-->" /> 3233 <button type="submit" class="hover_change_image btn" name="search">検索</button> 34 </form> 35 </div> 36 <!--{/strip}-->

一応はURLパラメータに値が入っているのは確認できてはいますが、
絞り込みができません。

何か書き間違いでもあるのでしょうか?
どなたかよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問