SearchFieldsで指定した「options add blank」が機能しない
出典: SugarForum.jp
Sugar5.0 の SearchFormクラスは、
- SearchForm.php に記述されたものと、
- SearchForm2.php に記述されたもの
の2つがあり、新しいフレームワークを用いるかどうかで、どちらのクラスが使われるかが変わります。そのため、従来有効だったオプションが使えないケースがいくつかあります。例えば、下記の「options_add_blank」指定は新フレームワークでは無視されます。
$searchFields['MyModule'] = array (
'type'=> array('query_type'=>'default', 'options_add_blank'=>true),
);
※「options_add_blank」は、従来、検索時にenumフィールドに空文字列の選択肢を追加する設定です。
「options_add_blank」機能を復活させる
以下のファイルに、若干の変更を加えることで機能を復活させることができます。ただし、この改変はアップグレードセーフではありませんので、注意して下さい。
SugarRoot/include/SearchForm/SearchForm2.php
100行を過ぎた辺りの、setup() 関数内、
if($this->displayView != 'saved_views'){
$this->_build_field_defs();
}
/*コメントアウト部分、省略*/
$this->searchFields = $searchFields[$this->module];
の箇所、以下のように順序を入れ替えます。
$this->searchFields = $searchFields[$this->module];
if($this->displayView != 'saved_views'){
$this->_build_field_defs();
}
330行目あたり、_build_field_defs() 関数内、
if(isset($this->fieldDefs[$name.'_'.$this->parsedView]['options']) && isset($GLOBALS['app_list_strings'][$this->fieldDefs[$name.'_'.$this->parsedView]['options']])) {
$this->fieldDefs[$name.'_'.$this->parsedView]['options'] = $GLOBALS['app_list_strings'][$this->fieldDefs[$name.'_'.$this->parsedView]['options']]; // fill in enums
}
のところに、下記のように書き足します。
if(isset($this->fieldDefs[$name.'_'.$this->parsedView]['options']) && isset($GLOBALS['app_list_strings'][$this->fieldDefs[$name.'_'.$this->parsedView]['options']])) {
$this->fieldDefs[$name.'_'.$this->parsedView]['options'] = $GLOBALS['app_list_strings'][$this->fieldDefs[$name.'_'.$this->parsedView]['options']]; // fill in enums
#ココカラ
if (isset($this->searchFields[$name]['options_add_blank'])
&& $this->searchFields[$name]['options_add_blank'] == true)
$this->fieldDefs[$name.'_'.$this->parsedView]['options']
= array_merge(array(=>), $this->fieldDefs[$name.'_'.$this->parsedView]['options']);
#ココマデ
}
これで、SearchFieldsで「options_add_blank」を指定した場合に、空文字列の選択肢が追加されるようになるはずです。