SugarCRM でアカウントを検索するときにワイルドカード検索を行う方法を探していますが、クエリが正しく機能しません。
build_generic_where_clause() 関数は次のとおりです。
function build_generic_where_clause ($the_query_string) {
$where_clauses = Array();
$the_query_string = $this->db->quote($the_query_string);
array_push($where_clauses, "accounts.name like '%$the_query_string%'");
if (is_numeric($the_query_string)) {
array_push($where_clauses, "accounts.phone_alternate like '%$the_query_string%'");
array_push($where_clauses, "accounts.phone_fax like '%$the_query_string%'");
array_push($where_clauses, "accounts.phone_office like '%$the_query_string%'");
}
$the_where = "";
foreach($where_clauses as $clause)
{
if(!empty($the_where)) $the_where .= " or ";
$the_where .= $clause;
}
$log = fopen('1.txt', "a");
fwrite($log, $the_where . "\n");
return $the_where;
}
array_push($where_clauses, "accounts.name like '%$the_query_string%'");
the_query_string の両側にパーセント記号を含めるように変更しただけです。
view.list.php の processSearchForm() は次のとおりです。
function processSearchForm(){
if(isset($_REQUEST['query']))
{
// we have a query
if(!empty($_SERVER['HTTP_REFERER']) && preg_match('/action=EditView/', $_SERVER['HTTP_REFERER'])) { // from EditView cancel
$this->searchForm->populateFromArray($this->storeQuery->query);
}
else {
$this->searchForm->populateFromRequest();
}
$where_clauses = $this->searchForm->generateSearchWhere(true, $this->seed->module_dir);
if (count($where_clauses) > 0 )$this->where = '('. implode(' ) AND ( ', $where_clauses) . ')';
$GLOBALS['log']->info("List View Where Clause: $this->where");
$log = fopen('1.txt', "a");
fwrite($log, $this->where . "\n");
}
if($this->use_old_search){
switch($view) {
case 'basic_search':
$this->searchForm->setup();
$this->searchForm->displayBasic($this->headers);
break;
case 'advanced_search':
$this->searchForm->setup();
$this->searchForm->displayAdvanced($this->headers);
break;
case 'saved_views':
echo $this->searchForm->displaySavedViews($this->listViewDefs, $this->lv, $this->headers);
break;
}
}else{
echo $this->searchForm->display($this->headers);
}
}
$this->where をキャッチするためにログ ファイルの書き込みのみを追加したことに注意してください。検索ボックスを使用して「Newbold」や「New York Design」などのアカウントを検索すると、結果として「Newbold」のみが表示され、ログ ファイルには(accounts.name like 'new%')
. したがって、最初のパーセント記号は何らかの形で削除されています。私は processSearchForm() がどこかにあると信じています。それが事実なのか、それとも犯人が別の場所にあるのかを突き止めるのは難しい. このコードは少し複雑であちこちにあると思いますが、これは私が行う必要がある唯一のカスタマイズです。どんな助けでも大歓迎です。