質問 > 管理機能 > 管理画面の商品検索 説明文も |
管理機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
iwakiri |
投稿日時: 2014/12/16 14:29
対応状況: −−−
|
半人前 登録日: 2014/11/4 居住地: 投稿: 13 |
Re: 管理画面の商品検索 説明文も dondon様
syntax errorということで、単純な構文エラーのようです。 326行目付近をよく見て、記述に間違いが無いか確認してみてください。 もし分からない場合は、記述されたcase文及び、326行目前後のコードを貼っていただければこちらで確認できるかと思います。 |
dondon |
投稿日時: 2014/12/17 10:54
対応状況: −−−
|
一人前 登録日: 2012/2/23 居住地: 投稿: 136 |
Re: 管理画面の商品検索 説明文も iwakiri様
ありがとうございます。 私が変に触ったモノだと混乱しそうなので現在のものを添付します。 ここのどこをどう書き変えれば 検索時に 題名、説明文、キーワードからヒットさせられるのでしょうか。 以下、LC_Page_Admin_Products.php /** * クエリを構築する. * * 検索条件のキーに応じた WHERE 句と, クエリパラメーターを構築する. * クエリパラメーターは, SC_FormParam の入力値から取得する. * * 構築内容は, 引数の $where 及び $arrValues にそれぞれ追加される. * * @param string $key 検索条件のキー * @param string $where 構築する WHERE 句 * @param array $arrValues 構築するクエリパラメーター * @param SC_FormParam $objFormParam SC_FormParam インスタンス * @param SC_FormParam $objDb SC_Helper_DB_Ex インスタンス * @return void */ function buildQuery($key, &$where, &$arrValues, &$objFormParam, &$objDb) { $dbFactory = SC_DB_DBFactory_Ex::getInstance(); switch ($key) { // 商品ID case 'search_product_id': $where .= " AND product_id = ?"; $arrValues[] = sprintf('%d', $objFormParam->getValue($key)); break; // 商品コード case 'search_product_code': $where .= " AND product_id IN (SELECT product_id FROM dtb_products_class WHERE product_code ILIKE ? GROUP BY product_id)"; $arrValues[] = sprintf('%%%s%%', $objFormParam->getValue($key)); break; // 商品名 case 'search_name': // 商品名をwhere文に $name = $objFormParam->getValue($key); $name = str_replace(",", "", $name); // 全角スペースを半角スペースに変換 $name = str_replace(' ', ' ', $name); // スペースでキーワードを分割 $names = preg_split("/ +/", $name); // 分割したキーワードを一つずつwhere文に追加 foreach ($names as $val) { if ( strlen($val) > 0 ) { $where .= " AND name ILIKE ? "; $arrValues[] = sprintf('%%%s%%', $val); } } // $where .= " AND name LIKE ?"; // $arrValues[] = sprintf('%%%s%%', $objFormParam->getValue($key)); // カテゴリ case 'search_category_id': list($tmp_where, $tmp_Values) = $objDb->sfGetCatWhere($objFormParam->getValue($key)); if($tmp_where != "") { $where.= " AND product_id IN (SELECT product_id FROM dtb_product_categories WHERE " . $tmp_where . ")"; $arrValues = array_merge((array)$arrValues, (array)$tmp_Values); } break; // 種別 case 'search_status': $tmp_where = ""; foreach($objFormParam->getValue($key) as $element) { if($element != "") { if(SC_Utils_Ex::isBlank($tmp_where)) { $tmp_where .= " AND (status = ?"; } else { $tmp_where .= " OR status = ?"; } $arrValues[] = $element; } } if(!SC_Utils_Ex::isBlank($tmp_where)) { $tmp_where .= ")"; $where .= " $tmp_where "; } break; // 登録・更新日(開始) case 'search_startyear': $date = SC_Utils_Ex::sfGetTimestamp($objFormParam->getValue('search_startyear'), $objFormParam->getValue('search_startmonth'), $objFormParam->getValue('search_startday')); $where.= " AND update_date >= ?"; $arrValues[] = $date; break; // 登録・更新日(終了) case 'search_endyear': $date = SC_Utils_Ex::sfGetTimestamp($objFormParam->getValue('search_endyear'), $objFormParam->getValue('search_endmonth'), $objFormParam->getValue('search_endday'), true); $where.= " AND update_date <= ?"; $arrValues[] = $date; break; // 商品ステータス case 'search_product_statuses': if(count($objFormParam->getValue($key)) > 0) { $where .= " AND product_id IN (SELECT product_id FROM dtb_product_status WHERE product_status_id IN ("; foreach($objFormParam->getValue($key) as $param) { $where .= "?,"; $arrValues[] = $param; } $where = preg_replace("/,$/", "))", $where); } break; } } |
IPLOGIC |
投稿日時: 2014/12/17 20:39
対応状況: −−−
|
一人前 登録日: 2014/12/8 居住地: 東京都 投稿: 96 |
Re: 管理画面の商品検索 説明文も dondon様
syntax errorの場所は326行目がどこなのか不明なためわかりませんが、ソースを確認して以下の2点が気になりました。 1.case 'search_name': の処理の最後にbreak;が無い。 2.恐らくカンマ区切りのキーワードを半角スペース区切りに変更したいのだと思いますが、空文字になっている。 $name = str_replace(",", "", $name); 特に1の内容は処理結果が全く変わってしまいますので、ご注意ください。
|
dondon |
投稿日時: 2014/12/18 9:27
対応状況: −−−
|
一人前 登録日: 2012/2/23 居住地: 投稿: 136 |
Re: 管理画面の商品検索 説明文も IPLOGIC様
ご指導ありがとうございます。 「break;が無い。」が原因でした・・・。すみません。 しかし、説明文かた検索は無事ヒットしましたが、今度は変える前にできていたAND検索ができなくなってしまいました。 AND検索+説明文もヒット は共存が難しいのでしょうか。 そこまでやるとなると検索画面にチェックボックスなどを用いて、○AND検索 ○OR検索 ○説明文検索 みたいにしないといけませんか? ■元々のコード(タイトルをスペース区切りでAND検索可能だった) // 商品名 case 'search_name': // 商品名をwhere文に $name = $objFormParam->getValue($key); $name = str_replace(",", "", $name); // 全角スペースを半角スペースに変換 $name = str_replace(",", "", $name); // スペースでキーワードを分割 $names = preg_split("/ +/", $name); // 分割したキーワードを一つずつwhere文に追加 foreach ($names as $val) { if ( strlen($val) > 0 ) { $where .= " AND name ILIKE ? "; $arrValues[] = sprintf('%%%s%%', $val); } } break; ■変更したコード(説明文もヒットするが、AND検索が無効に・・・) // 商品名 case 'search_name': // 商品名をwhere文に $name = $objFormParam->getValue($key); $name = str_replace(",", "", $name); // 全角スペースを半角スペースに変換 $name = str_replace(",", "", $name); // スペースでキーワードを分割 $names = preg_split("/ +/", $name); // 分割したキーワードを一つずつwhere文に追加 foreach ($names as $val) { if ( strlen($val) > 0 ) { $where .= " AND ( name LIKE ? OR comment3 LIKE ? OR main_comment LIKE ?) "; $arrValues[] = sprintf('%%%s%%', $objFormParam->getValue($key)); $arrValues[] = sprintf('%%%s%%', $objFormParam->getValue($key)); $arrValues[] = sprintf('%%%s%%', $objFormParam->getValue($key)); } } break; ご多忙の中、恐縮です。 |
IPLOGIC |
投稿日時: 2014/12/18 19:54
対応状況: −−−
|
一人前 登録日: 2014/12/8 居住地: 東京都 投稿: 96 |
Re: 管理画面の商品検索 説明文も dondon 様
1点気になるところと言えば「全角スペースを半角スペースに変換する処理」が変更後のソースには見当たりませんでした。 ただ、その点を踏まえても、変更後のプログラムを見る限りではAND検索ができなくなった原因は特に見当たりません。 再度テストされたデータの内容などをご確認いただいたほうが良いかもしれません。
|
« 1 (2) |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |