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」を指定した場合に、空文字列の選択肢が追加されるようになるはずです。


最終更新 16:47, 2009年1月24日 (土)。   このページは 1,333 回アクセスされました。