検索フォームの半角全角変換
出典: 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 が上書きされてしまうことがあります。その場合は、再度上記コードを挿入して下さい。
(※メタデータについては、アップグレードの影響を受けません。)