バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

機能要望 > フロント機能 > 商品検索ブロック「or検索」に関して

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
Linux-user
投稿日時: 2010/2/12 13:42
対応状況: 確認中
常連
登録日: 2008/1/8
居住地:
投稿: 62
商品検索ブロック「or検索」に関して
[EC-CUBE] 2.3.4(手動アップデート済)
[レンタルサーバ] クララオンライン
[OS] Red Hat Enterprise Linux 5
[PHP] PHP 5.1.6
[データベース] PostgreSQL 8.3.4
[WEBサーバ] Apache(ver 2.2.3 )

[機能要望]商品検索ブロックにおいて、and検索はデフォルトで可能なのですが、
or検索ができません。

「or検索」の実装は可能なのでしょうか。
宜しくお願い致します。
nanasess
投稿日時: 2010/2/12 13:59
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2313
Re: 商品検索ブロック「or検索」に関して
↓このへんをカスタマイズすれば可能です.
http://svn.ec-cube.net/open_trac/ticket/200
Linux-user
投稿日時: 2010/2/12 16:23
対応状況: 確認中
常連
登録日: 2008/1/8
居住地:
投稿: 62
Re: 商品検索ブロック「or検索」に関して
nanasess様
ご返信頂きましてありがとうございます。
添付URLを確認させて頂きました。

/data/class/pages/products/LC_Page_Products_List.php

// 商品名をwhere文に ・・・
あたりのWHERE句にORを使う場合を追記すれば良いということでしょうか。

このあたりからWHERE句で調べているのですが、
どうも追記の方法がよく分からず、苦戦しております。

アラタナ様が公開されております「EC CUBEの学校」のように、
チェックボックスで「AND検索」や「OR検索」を実装したいのですが、

チェックボックスを利用する場合は、
また「LC_Page_Products_List.php」の書き方が難しくなるのでしょうか。
nanasess
投稿日時: 2010/2/12 16:33
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2313
Re: 商品検索ブロック「or検索」に関して

 $where .= " AND ( name ILIKE ? OR comment3 ILIKE ?) ";


上記の AND の部分を, チェックボックスやラジオボタンの値に従って, AND や OR に可変させてやれば良いと思います.

試してないので, はずしていたらすみません.

# フォームの値をチェックせずに直接渡すと SQLインジェクションになるのでご注意を...
Linux-user
投稿日時: 2010/2/18 20:36
対応状況: 確認中
常連
登録日: 2008/1/8
居住地:
投稿: 62
Re: 商品検索ブロック「or検索」に関して
ご返信頂きましてありがとうございます。

/data/class/pages/products/LC_Page_Products_List.php 引用:
// 商品名をwhere文に
$name = ereg_replace(",", "", $name);// XXX
// 全角スペースを半角スペースに変換
$name = str_replace(' ', ' ', $name);
// スペースでキーワードを分割
$names = preg_split("/ +/", $name);
// 分割したキーワードを一つずつwhere文に追加
foreach ($names as $val) {
if ( strlen($val) > 0 ){
if ($_GET['andor'] != 2) {
$where .= " AND ( name ILIKE ? OR comment3 ILIKE ?) ";
} else {
$where .= " OR ( name ILIKE ? OR comment3 ILIKE ?) ";
}

$ret = SC_Utils_Ex::sfManualEscape($val);
$arrval[] = "%$ret%";
$arrval[] = "%$ret%";
}
}

if (empty($arrval)) {
$arrval = array();
}

//金額を検索条件に(カスタマイズ部分)
$money1 = $_GET['money1'];
$money2 = $_GET['money2'];
if (strlen($money1) > 0){
$money1n = intval($money1);
$where .= " AND ( {$money1n} < price02_max) ";
}
if (strlen($money2) > 0){
$money2n = intval($money2);
$where .= " AND ( price02_max < {$money2n}) ";
}

商品検索のTPLに追加したソース 引用:
<select name="andor">
<option selected value="1">をすべて含む</option>
<option value="2">のいずれかを含む</option>
</select>


この状態で検証してみましたが、どうもうまく「OR」検索ができませんでした。
プルダウンで「OR」にして検索すると、全ての商品がHITします。
※うまく情報の引継ぎができていないのかも知れません。


EC-CUBE 商品検索で、価格での検索も可能にする。(ver.2.1.2)
http://www.jaga99.com/blog/?p=34

もしかすると、金額検索のカスタマイズ部分が連動するので
おかしくなっているのかも知れませんが、
記述の方法としては合っていますでしょうか。

ご教授の程、宜しくお願い致します。
nanasess
投稿日時: 2010/2/19 0:07
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2313
Re: 商品検索ブロック「or検索」に関して

$where .= " OR ( name ILIKE ? OR comment3 ILIKE ?) ";


スミマセン. この部分は, 単純に OR でつなぐのではなく,


AND ( ( name ILIKE ? OR comment3 ILIKE ?) OR ( name ILIKE ? OR comment3 ILIKE ?) OR ( name ILIKE ? OR comment3 ILIKE ?)〜)


というように, 「AND で複数の OR」をつなぐようにしなくてはなりませんね^^;
Linux-user
投稿日時: 2010/2/19 10:12
対応状況: 確認中
常連
登録日: 2008/1/8
居住地:
投稿: 62
Re: 商品検索ブロック「or検索」に関して
ご返信頂きましてありがとうございます。

/data/class/pages/products/LC_Page_Products_List.php 引用:
// 商品名をwhere文に
$name = ereg_replace(",", "", $name);// XXX
// 全角スペースを半角スペースに変換
$name = str_replace(' ', ' ', $name);
// スペースでキーワードを分割
$names = preg_split("/ +/", $name);
// 分割したキーワードを一つずつwhere文に追加
foreach ($names as $val) {
if ( strlen($val) > 0 ){
if ($_GET["andor"] != 2) {
$where .= " AND ( name ILIKE ? OR comment3 ILIKE ?) ";
} else {
$where .= " AND ( ( name ILIKE ? OR comment3 ILIKE ?) OR ( name ILIKE ? OR comment3 ILIKE ?) OR ( name ILIKE ? OR comment3 ILIKE ?) ) ";
}
$ret = SC_Utils_Ex::sfManualEscape($val);
$arrval[] = "%$ret%";
$arrval[] = "%$ret%";
}
}

if (empty($arrval)) {
$arrval = array();
}

//金額を検索条件に(カスタマイズ部分)
$money1 = $_GET['money1'];
$money2 = $_GET['money2'];
if (strlen($money1) > 0){
$money1n = intval($money1);
$where .= " AND ( {$money1n} < price02_max) ";
}
if (strlen($money2) > 0){
$money2n = intval($money2);
$where .= " AND ( price02_max < {$money2n}) ";
}

AND で複数の ORをつなぎましたところ、システムエラーになってしまいました。
これも記述方法に間違いがあるのでしょうか。
nanasess
投稿日時: 2010/2/19 10:31
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2313
Re: 商品検索ブロック「or検索」に関して
スミマセン. 先の投稿は, 参考になるよう SQL の例として書いたのであって, そのままコピペしてはダメです^^;

最終的に出来上がる SQL が下記のようになるようプログラミングしてみてください.

AND 検索

AND ( name ILIKE ? OR comment3 ILIKE ?) AND ( name ILIKE ? OR comment3 ILIKE ?) AND ( name ILIKE ? OR comment3 ILIKE ?) 〜


OR 検索

AND ( ( name ILIKE ? OR comment3 ILIKE ?) OR ( name ILIKE ? OR comment3 ILIKE ?) OR ( name ILIKE ? OR comment3 ILIKE ?) 〜)



nmura
投稿日時: 2011/11/21 15:05
対応状況: −−−
新米
登録日: 2011/11/17
居住地:
投稿: 1
Re: 商品検索ブロック「or検索」に関して
途中から参加で失礼します。

OR検索では実際、どのようにプログラミングすればよいか教えていただけると嬉しいです。
力不足の為、どうしてもシステムエラーとなってしまい困っています、、、

よろしくお願いします。
seasoft
投稿日時: 2011/11/21 15:11
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7367
Re: 商品検索ブロック「or検索」に関して
何をして、どのようなエラーが出ているのかは、具体的に書いておかないと話が進みにくいかと。

また、
http://xoops.ec-cube.net/modules/tinyd0/index.php?id=8
をご一読いただくと宜しいかと思います。


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1294
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.