バージョン選択

フォーラム

メニュー

オンライン状況

59 人のユーザが現在オンラインです。 (52 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 59
もっと...

サイト内検索

質問 > 管理機能 > 管理画面での商品検索

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
dondon
投稿日時: 2013/4/24 18:03
対応状況: −−−
一人前
登録日: 2012/2/23
居住地:
投稿: 136
管理画面での商品検索
仕様
PHP Version 5.3.3
MYSQL
EC-CUBE 2.11.4

管理画面の商品検索をいわゆるAND検索にしたいです。

方法をご教授頂けませんでしょうか。
cohki
投稿日時: 2013/4/24 19:18
対応状況: −−−
一人前
登録日: 2013/4/15
居住地:
投稿: 133
Re: 管理画面での商品検索
こんにちは。

手元のバージョンが異なりますが、大差はないはずですのでコメントさせて頂きます。

さて、本題ですが。
こちらの環境ではデフォルトでAND検索になっています。

例として以下の検索パラメータ取得、検索条件クエリ作成部分に示す通りです。


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 ?)';
                $arrValues[] = sprintf('%%%s%%', $objFormParam->getValue($key));
                break;
            // 商品名
            case 'search_name':
                $where .= ' AND name LIKE ?';
                $arrValues[] = sprintf('%%%s%%', $objFormParam->getValue($key));
                break;
            // カテゴリ


AND検索になっていない状況が掴めませんので、
詳細を教えて頂けると回答しやすくなるかもしれません。

dondon
投稿日時: 2013/4/25 10:37
対応状況: −−−
一人前
登録日: 2012/2/23
居住地:
投稿: 136
Re: 管理画面での商品検索
cohki様

ありがとうございます。

フロントページではANDですが、管理画面ではANDで検索できません。

念の為、再度確認しましたが、ダメでした。

題名「あああ いいい」の商品を探す際、

検索であああ いいい と検索すればヒットしますが、

いいい あああ で検索ではヒットしません。

パラメータなどでかんたんに変更できるのでしょうか?
cohki
投稿日時: 2013/4/25 11:38
対応状況: −−−
一人前
登録日: 2013/4/15
居住地:
投稿: 133
Re: 管理画面での商品検索
こんにちは。

引用:

題名「あああ いいい」の商品を探す際、

検索であああ いいい と検索すればヒットしますが、

いいい あああ で検索ではヒットしません。


誤解あったかもしれませんが、
商品名をスペースで区切った時の要求ということでしょうか。

例えばこの例だと、「いいい あああ」でも検索をヒットさせたいという要望で、
また他の検索条件(カテゴリや登録日など)とは関係ない形です。

よろしくお願いします。
dondon
投稿日時: 2013/4/25 13:08
対応状況: −−−
一人前
登録日: 2012/2/23
居住地:
投稿: 136
Re: 管理画面での商品検索
わかりずらい表現で申し訳ございません。

具体的に申しますと、

スペースで区切った複数のキーワード全部を含む商品名の物をヒットさせたいです。

なお、商品名にはスペースがあったりなかったりします。

商品リストに
「メロンのスプーン」
「リンゴとメロンとジュース」
「リンゴとバナナとジュース」
があったとします。

検索窓で
「リンゴ バナナ」と検索したら
「リンゴとバナナとジュース」がヒット

「ジュース バナナ」と検索したら
「リンゴとバナナとジュース」がヒット

「メロン」と検索したら
「メロンのスプーン」
「リンゴとメロンとジュース」がヒット

以上の様にしたいのです。デフォルトではこうなりません…。

結局フロント画面の検索窓と同じ様な検索条件にしたいのです。

宜しくお願いします。
cohki
投稿日時: 2013/4/25 14:31
対応状況: −−−
一人前
登録日: 2013/4/15
居住地:
投稿: 133
Re: 管理画面での商品検索
丁寧な回答ありがとうございます。

確認したところ、確かにおっしゃるようにフロントと管理側では検索の仕方が異なっているようですね。

管理側はシンプルに入力した文字列が含まれるかどうかのみチェックしているようです。

※管理側(class/pages/admin/products/LC_Page_Admin_Products.php)

  $where .= ' AND name LIKE ?';
  $arrValues[] = sprintf('%%%s%%', $objFormParam->getValue($key));


一方、フロント側は丁寧に分割して各々チェックしています。

※フロント側(class/pages/products/LC_Page_Products_List.php)

  // 商品名をwhere文に
  $name = $arrSearchData['name'];
  $name = str_replace(',', '', $name);
  // 全角スペースを半角スペースに変換
  $name = str_replace(' ', ' ', $name);
  // スペースでキーワードを分割
  $names = preg_split('/ +/', $name);
  // 分割したキーワードを一つずつwhere文に追加
  foreach ($names as $val) {
      if (strlen($val) > 0) {
          $searchCondition['where']    .= ' AND ( alldtl.name ILIKE ? OR alldtl.comment3 ILIKE ?) ';
          $searchCondition['arrval'][]  = "%$val%";
          $searchCondition['arrval'][]  = "%$val%";
      }
  }


管理側のコードをこちらのフロント側のコードを参考にして、
置き換えてみると解決するかと思います。

よろしくお願いします。
namahage
投稿日時: 2013/4/25 14:31
対応状況: −−−
長老
登録日: 2013/2/28
居住地: 大阪
投稿: 198
Re: 管理画面での商品検索
ども〜!

管理画面の商品名検索はデフォルトでは一つしかキーワードいれれません。カンマで区切ったり、空白スペースでくぎったりして検索しても、「A B」とすると「A B」という商品名をそのまま検索しに行きますので、AとBで検索しに行くようにしないといけませんのでカスタマイズが必要となります。


フロント側の検索と同じような動きにしたい!ってことですよね?
じゃあフロントの処理を見に行くのが一番です。

LC_Page_Products_ListのlfGetSearchConditionという関数をみてください。
そこにヒントがあります。それを参考に管理画面の商品検索ロジックを修正すればよいのです。

次回からはプログラムをまずはみてみるということをしてみましょう。

LC_Page_Admin_ProductsのbuildQuery内の

        // 商品名
        case 'search_name':
            $where .= " AND name LIKE ?";
            $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));


に変更すると大丈夫たと思いますよ。
dondon
投稿日時: 2013/4/26 14:43
対応状況: −−−
一人前
登録日: 2012/2/23
居住地:
投稿: 136
Re: 管理画面での商品検索
namahage様、cohki様

ご丁寧にありがとうございます。

本業が多忙になってしまい、まだ手が付けられませんが、

今度試みてみます。また、後日結果を報告致します。

dondon
投稿日時: 2013/4/30 10:08
対応状況: 解決済
一人前
登録日: 2012/2/23
居住地:
投稿: 136
Re: 管理画面での商品検索
namahage様、cohki様

ご教授頂きありがとうございます。

本日希望通りの動作にできました。

今後はまずプログラムを見て、不明な点を質問する様に致します。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,710名です
総投稿数は109,948件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1638
8
red
1570
9
mcontact
1285
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.