[eccube3]受注マスターの名前検索カスタマイズ

姓名の間にスペースがあると検索に引っかからない仕様と戦う。

ECCUBEバージョン

3.0.18

参考

EC-CUBE 開発コミュニティ – フォーラム

編集ファイル

src/Eccube/Repository/OrderRepository.php

やることとか前提とか仕様とかの話

受注マスターで名前から検索する場合、以下のパターンでないと該当なしになる。

  • 「姓」「名」スペースなし連結
  • 「姓」のみ
  • 「名」のみ

つまりは姓名の間にスペースが入ってると終わる。
仕様がわかっていなければ当然のこと、わかっていてもいちいちスペースを削るのはめんどくさい。ということで、スペースに対応していく。

常時表示されてる検索窓のカスタマイズ

何行目とかいうとプレーンなデータを引っ張ってこなきゃいけなくなって果てしなくめんどいので、データ内に重複はないので、検索して該当箇所を探して下さい。

andWhere('o.id = :multi OR o.name01 LIKE :likemulti OR o.name02 LIKE :likemulti OR ' .

これを

->andWhere('o.id = :multi OR o.name01 LIKE :likemulti OR o.name02 LIKE :likemulti OR CONCAT(o.name01, o.name02) LIKE :likemulti OR CONCAT(o.name01,\' \', o.name02) LIKE :likemulti OR CONCAT(o.name01,\' \', o.name02) LIKE :likemulti OR ' .

こうする。
CONCATで連結したものを条件に追加してるのが分かる。んで、それらはスペースなし・半角スペース・全角スペースで細分化してある。

応用してフリガナのところもこれでやっていけます。

詳細検索部のカスタマイズ

検索窓右側の「+」を押したら展開するところも編集。
処理してるところが違うのでそれぞれやらなきゃいけないのがちょっとめんどい。まあやることはほぼ一緒。

->andWhere('CONCAT(o.name01, o.name02) LIKE :name')

これは2箇所あるから注意。下の方をいじる。
これを

->andWhere('CONCAT(o.name01, o.name02) LIKE :name OR CONCAT(o.name01,\' \', o.name02) LIKE :name OR CONCAT(o.name01,\' \', o.name02) LIKE :name')

こう。

こっちのフリガナはカタカナ判定があって、スペースはカタカナと見做されないのでエラーになるから使えない。

コメント

タイトルとURLをコピーしました