検索フォームの半角全角変換

出典: SugarForum.jp

日本人ユーザの場合、半角の電話番号フィールドに、全角数字で検索をかけてしまうケースがしばしば発生します。その場合、期待した検索結果は得られません。しかし、半角全角を意識している一般ユーザは多くなく、これは使い勝手の点でマイナスです。「なんとか、半角全角どちらでも問題なく動作させたい」というニーズは大きいものと思われます。

残念ながら、標準でそのような機能は用意されていませんので、日本独自のカスタマイズが必要になります。また、アップグレードセーフなかたちでは実現が難しいのが現状です。(他の解法がありましたら、ぜひお知らせください!)

SearchFields メタデータ

仮に、[ふりがな] と [勤務先電話] の検索フィールドがあるとします。

#カスタマイズ前
'furigana'=> array('query_type'=>'default'),
'phone_work'=> array('query_type'=>'default'),

通常、上記のようになっているはずですが、下記のように 'ja_filter' の項を追加指定します。指定内容は、PHPのmb_convert_kana関数のフォーマットに準じます。例えば、'a'を指定することで英数字を半角に統一できます。

#カスタマイズ後
'furigana'=> array('query_type'=>'default', 'ja_filter'=>'Hcs'), //全角かなに、空白は半角に
'phone_work'=> array('query_type'=>'default', 'ja_filter'=>'as'), //英数字と空白を半角に

SearchFormクラス

上記の指定のように、期待した動作をさせるには SearchFormクラス に若干手を加える必要があります。

SugarRoot/include/SearchForm/SearchForm2.php

をテキストエディタで開き、generateSearchWhere 関数を探します。400行目を過ぎたあたりだと思います。

#カスタマイズ前
function generateSearchWhere($add_custom_fields = false, $module=) {
  global $timedate;
  /*
  省略
  */
  if ($type == 'int') {
    if (!empty($parms['value'])) {

上記、typeがintの場合の判別コードの上に、下記のようにコードを挿入します。

#カスタマイズ後
function generateSearchWhere($add_custom_fields = false, $module=) {
  global $timedate;
  /*
  省略
  */
  #Japanese Filter
  if (!empty($parms['value']) && array_key_exists('ja_filter', $parms)) {
    $parms['value'] = mb_convert_kana($parms['value'], $parms['ja_filter']);
  }
  #/Japanese Filter'
  if ($type == 'int') {
    if (!empty($parms['value'])) {

変更箇所はこの一点のみです。


アップグレード時の注意

パッチをあてると、SearchForm2.php が上書きされてしまうことがあります。その場合は、再度上記コードを挿入して下さい。

(※メタデータについては、アップグレードの影響を受けません。)


最終更新 07:36, 2008年12月9日 (火)。   このページは 2,659 回アクセスされました。