バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > 検索窓で商品コードも検索したい

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
NSX-R
投稿日時: 2019/3/2 5:51
対応状況: −−−
長老
登録日: 2012/12/14
居住地:
投稿: 234
検索窓で商品コードも検索したい
▼テンプレート
[EC-CUBE] 3.0.17
[レンタルサーバ] xserver
[OS] Linux sv5320.xserver.jp 4.4.0-141-generic #167-Ubuntu SMP Wed Dec 5 10:40:15 UTC 2018 x86_64
[PHP] 7.1.18


お世話になっております

新しくeccube3をインストールし直して設定をしているところですが、
検索で商品コードを認識してくれません。システムエラーになってしまします。

参考にしているのはこちらです以前のバーションだと動いていたはずですが、3.0.17をインストールし直してからはシステムエラーになってしまいましす。

/src/Eccube/Repository/ProductRepository.php

117行目ぐらい
// name
if (isset($searchData['name']) && Str::isNotBlank($searchData['name'])) {
$keywords = preg_split('/[\s ]+/u', $searchData['name'], -1, PREG_SPLIT_NO_EMPTY);

foreach ($keywords as $index => $keyword) {
$key = sprintf('keyword%s', $index);
$qb
->andWhere(sprintf('NORMALIZE(p.name) LIKE NORMALIZE(:%s) OR NORMALIZE(p.search_word) LIKE NORMALIZE(:%s)', $key, $key))
->setParameter($key, '%' . $keyword . '%');
}
}



// name
if (isset($searchData['name']) && Str::isNotBlank($searchData['name'])) {
$keywords = preg_split('/[\s ]+/u', $searchData['name'], -1, PREG_SPLIT_NO_EMPTY);

foreach ($keywords as $index => $keyword) {
$key = sprintf('keyword%s', $index);
//$qb
// ->andWhere(sprintf('NORMALIZE(p.name) LIKE NORMALIZE(:%s) OR NORMALIZE(p.search_word) LIKE NORMALIZE(:%s)', $key, $key))
// ->setParameter($key, '%' . $keyword . '%');
$qb
->andWhere(sprintf('NORMALIZE(p.name) LIKE NORMALIZE(:%s) OR NORMALIZE(p.search_word) LIKE NORMALIZE(:%s) OR NORMALIZE(p.description_detail) LIKE NORMALIZE(:%s) OR NORMALIZE(p.description_list) LIKE NORMALIZE(:%s) OR NORMALIZE(pc.code) LIKE NORMALIZE(:%s)', $key, $key, $key, $key, $key))
->setParameter($key, '%' . $keyword . '%');
}
}

をこのようにして、商品コードを pc.code としているんです。

解決方法を教えていただけませんでしょうか?
どうぞよろしくお願います。
468
投稿日時: 2019/3/2 11:21
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: 検索窓で商品コードも検索したい
pcのjoinを忘れている可能性はありませんか?


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

NSX-R
投稿日時: 2019/3/2 13:01
対応状況: −−−
長老
登録日: 2012/12/14
居住地:
投稿: 234
Re: 検索窓で商品コードも検索したい
siro8 様ありがとうございます。
具体的にはjoinはどのように使うのでしょうか?
ほかのファイルも変更するのでしょうか?

よろしくお願います。
hmorita_j
投稿日時: 2019/3/2 14:12
対応状況: −−−
長老
登録日: 2017/3/3
居住地: 沈黙の巨大都市松戸
投稿: 222
Re: 検索窓で商品コードも検索したい
同じファイル内のgetQueryBuilderBySearchDataForAdmin()を見ると参考になると思います。
NSX-R
投稿日時: 2019/3/2 15:31
対応状況: 解決済
長老
登録日: 2012/12/14
居住地:
投稿: 234
Re: 検索窓で商品コードも検索したい
siro8様

解決できました、どうもありがとうございました。

単純に->innerJoin('p.ProductClasses', 'pc')を付け足せばよかったんですね。

解決できた喜びは感動です!^^)
今後ともどうぞよろしくおねがいしますm(_ _)m

117行目以降

// name
if (isset($searchData['name']) && Str::isNotBlank($searchData['name'])) {
$keywords = preg_split('/[\s ]+/u', $searchData['name'], -1, PREG_SPLIT_NO_EMPTY);

foreach ($keywords as $index => $keyword) {
$key = sprintf('keyword%s', $index);
$qb
->innerJoin('p.ProductClasses', 'pc')
->andWhere(sprintf('NORMALIZE(p.name) LIKE NORMALIZE(:%s) OR NORMALIZE(pc.code) LIKE NORMALIZE(:%s) OR NORMALIZE(p.search_word) LIKE NORMALIZE(:%s)', $key, $key, $key))
->setParameter($key, '%' . $keyword . '%');
}
}
NSX-R
投稿日時: 2019/3/2 17:43
対応状況: −−−
長老
登録日: 2012/12/14
居住地:
投稿: 234
Re: 検索窓で商品コードも検索したい
すみません、解決できたと思ったらエラーが出てしまいました。

キーワード一個だと大丈夫なんですが、
スペースで区切って複数キーワードだとシステムエラーになってしまいます。

その場合はどこをいじればよいのでしょうか?
468
投稿日時: 2019/3/2 18:35
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: 検索窓で商品コードも検索したい
joinはforeachの外(ループの外)で指定してください。
出ているエラーは、すでにjoinされていますというものではないですか?


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

NSX-R
投稿日時: 2019/3/2 19:47
対応状況: 解決済
長老
登録日: 2012/12/14
居住地:
投稿: 234
Re: 検索窓で商品コードも検索したい
siro8様

何度もアドバイスありがとうございました。

foreachの外に設定したらうまくいきました。

本当にありがとうございました。

// name
if (isset($searchData['name']) && Str::isNotBlank($searchData['name'])) {
$keywords = preg_split('/[\s ]+/u', $searchData['name'], -1, PREG_SPLIT_NO_EMPTY);

$qb->innerJoin('p.ProductClasses', 'pc');

foreach ($keywords as $index => $keyword) {
$key = sprintf('keyword%s', $index);
$qb
->andWhere(sprintf('NORMALIZE(p.name) LIKE NORMALIZE(:%s) OR NORMALIZE(pc.code) LIKE NORMALIZE(:%s) OR NORMALIZE(p.search_word) LIKE NORMALIZE(:%s)', $key, $key, $key))
->setParameter($key, '%' . $keyword . '%');
}
}


追加:商品説明文からも検索 商品説明(description_detail)

// name
if (isset($searchData['name']) && Str::isNotBlank($searchData['name'])) {
$keywords = preg_split('/[\s ]+/u', $searchData['name'], -1, PREG_SPLIT_NO_EMPTY);

$qb->innerJoin('p.ProductClasses', 'pc');

foreach ($keywords as $index => $keyword) {
$key = sprintf('keyword%s', $index);
$qb
->andWhere(sprintf('NORMALIZE(p.name) LIKE NORMALIZE(:%s) OR NORMALIZE(pc.code) LIKE NORMALIZE(:%s) OR NORMALIZE(p.search_word) LIKE NORMALIZE(:%s) OR NORMALIZE(p.description_detail) LIKE NORMALIZE(:%s)', $key, $key, $key, $key))
->setParameter($key, '%' . $keyword . '%');
}
}
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1568
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
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.