Встала задача сделать возможным указывать диапазон дат, то есть с такого то по такой то период. Пошел рыть шугу, понял, что даже таких операторов как '>' и '<', для запросов в mysql не предусмотрено. Отсюда решение чуток подправить код.
Открываем файл include/SearchForm/SearchForm2.php, ищем там строку "switch(strtolower($operator)) {", вставляем перед ней код в котором мы добавляем новые запрос 'query_date' для конвертации даты в нужный формат.
Код:
if(isset($parms['query_date']) && $parms['query_date'] == true){
if($GLOBALS['db']->dbType == 'mysql') {
if(preg_match('/^\d{4}.\d{1,2}$/', $field_value) == 0) {
$field_value = $timedate->to_db_date($field_value, false);
}
}
}
Далее в теле switch добавляем новое условие, которое регистрирует нужные нам операторы:
Код:
case '>=':
$where .= "$db_field >= '$field_value'";
break;
case '<=':
$where .= "$db_field <= '$field_value'";
break;
case '>':
$where .= "$db_field > '$field_value'";
break;
case '<':
$where .= "$db_field < '$field_value'";
break;
Сохраняем и редактируем нужный модуль. У меня это Leads, задача добавить диапазон дат создания и модификации.
Указываем новые поля расширенного поиска в modules/Leads/metadata/searchdefs.php
Код:
array('name'=>'new_date_create', 'label' => 'LBL_NEW_DATE_CREATE', 'type'=>'date', 'displayParams'=>array('showFormats'=>true)),
array('name'=>'end_date_create', 'label' => 'LBL_END_DATE_CREATE', 'type'=>'date', 'displayParams'=>array('showFormats'=>true)),
array('name'=>'new_date_mod', 'label' => 'LBL_NEW_DATE_MOD', 'type'=>'date', 'displayParams'=>array('showFormats'=>true)),
array('name'=>'end_date_mod', 'label' => 'LBL_END_DATE_MOD', 'type'=>'date', 'displayParams'=>array('showFormats'=>true)),
Указываем как искать по нашим полям в modules/Leads/metadata/SearchFields.php
Код:
'new_date_create' => array('query_type'=>'default','operator'=>'>=','query_date'=>true,'db_field'=>array('DATE(leads.date_entered)')),
'end_date_create' => array('query_type'=>'default','operator'=>'<=','query_date'=>true,'db_field'=>array('DATE(leads.date_entered)')),
'new_date_mod' => array('query_type'=>'default','operator'=>'>=','query_date'=>true,'db_field'=>array('DATE(leads.date_modified)')),
'end_date_mod' => array('query_type'=>'default','operator'=>'<=','query_date'=>true,'db_field'=>array('DATE(leads.date_modified)')),
Ну и на по следок в файле modules/Leads/language/ru_ru.lang.php пишем отображаемые надписи
Код:
'LBL_NEW_DATE_CREATE' => 'Дата создания от',
'LBL_END_DATE_CREATE' => 'Дата создания до',
'LBL_NEW_DATE_MOD' => 'Дата модификации от',
'LBL_END_DATE_MOD' => 'Дата модификации до',
С помощью этого можно сделать поиск по депазону в любом модуле.
После изменения на забываем белать быстрое востановление (иначе будет не корректно отображаться названия.
http://litec.ru/forums.php?m=posts&q=11
ЗЫ: перенесите плиз в другой раздел.