Добро пожаловать на сайт Bitrix Q&A, где вы можете задавать вопросы о программировании и разработке на Битрикс и получать быстрые и квалифицированные ответы от профессионалов!


Фильтр в поиске

0 голосов
добрый день!
вопрос в следующем. Выводится страница поиска:

Код
$APPLICATION->IncludeComponent(
"site:search.page", 
".default", 
Array(
   "RESTART"   =>   "Y",
   "CHECK_DATES"   =>   "Y",
   "arrFILTER"   =>   $arrF,

..........................

используется фильтр:

Код
$arrF = array(
   "><DATE_CHANGE" => 
        Array(date($DB->DateFormatToPHP(CLang::GetDateFormat("FULL")), mktime(0,0,0,1,1,2003)),
              date($DB->DateFormatToPHP(CLang::GetDateFormat("FULL")), mktime(0,0,0,1,1,2004)))


однако фильтр не срабатывает 0_о
пробовал уже и в самом теле компонента все описывать - вроде и получается, однако полоса навигации:
Код
Результаты поиска 1 - 5 из 5
Начало | Пред. | 1 | След. | Конец 

показывает число, БЕЗ учета фильтра...

как можно решить данную проблему? вопрос в поиске с временным интервалом, форум ворошил, ничего интересного не нашел... :(

вот пример, как хотелось бы (на битриксе):
http://www.mchs.gov.ru/search/?q=%EF%EE%E8%F1%EA&x=0&y=0&date1=11.07.2009&date2=&cat=0
спросил 14 Июнь, 13 от Mageradje (660 баллов)

6 Ответы

0 голосов
Был подобный глюк. Попробуйте фильтр

Код
$arrF = array( 
   "><DATE_CHANGE" => 
        Array(date('Y-m-d 00:00:00',mktime(0,0,0,1,1,2003)), date('Y-m-d 00:00:00',mktime(0,0,0,1,1,2004))))
ответил 14 Июнь, 13 от SILVER (340 баллов)
0 голосов
Вадим Абрамов,
что-то нифига не помогает 0_о :(
ответил 27 Июнь, 13 от Mageradje (660 баллов)
0 голосов
Посмотрел документацию. В arrFILTER указываются другие данные. Для Вашего случая, похоже нужно изменить в компоненте, чтобы выборку до определения навигации делал с учетом Вашего фильтра.
ответил 30 Сен, 13 от SILVER (340 баллов)
0 голосов
не совсем понял ,как? 0_о
Вроде как в компоненте и так (файл component.php) навигация выполняется-описывается - после всей проверки-посдсчета...
ответил 31 Дек, 13 от Mageradje (660 баллов)
0 голосов
Вот кусок кода, который в компоненте отвечает за поиск:

Код
$arFilter = array(
    "SITE_ID" => SITE_ID,
    "QUERY" => $arResult["REQUEST"]["~QUERY"],
    "TAGS" => $arResult["REQUEST"]["~TAGS"],
);
if(strlen($where)>0)
{
    list($module_id, $part_id) = explode("_",$where,2);
    $arFilter["MODULE_ID"] = $module_id;
    if(strlen($part_id)>0) $arFilter["PARAM1"] = $part_id;
}
if($arParams["CHECK_DATES"])
    $arFilter["CHECK_DATES"]="Y";

$obSearch = new CSearch();
$obSearch->Search($arFilter, $aSort, $exFILTER);

$arResult["ERROR_CODE"] = $obSearch->errorno;
$arResult["ERROR_TEXT"] = $obSearch->error;

$arResult["SEARCH"] = array();
if($obSearch->errorno==0)
{
    $obSearch->NavStart($arParams["PAGE_RESULT_COUNT"], false);

Нужно поменять инициализацию фильтра на:

Код
$arFilter = array(
    "SITE_ID" => SITE_ID,
    "QUERY" => $arResult["REQUEST"]["~QUERY"],
    "TAGS" => $arResult["REQUEST"]["~TAGS"],
    "><DATE_CHANGE" => 
        Array(date($DB->DateFormatToPHP(CLang::GetDateFormat("FULL")), mktime(0,0,0,1,1,2003)), 
              date($DB->DateFormatToPHP(CLang::GetDateFormat("FULL")), mktime(0,0,0,1,1,2004)))
);
ответил 16 Апр, 14 от SILVER (340 баллов)
0 голосов
Вадим Абрамов,
огромное спасибо! вопрос практически решен, только даты осталось менять ;)
ответил 10 Авг, 14 от Mageradje (660 баллов)

Похожие вопросы

0 голосов
1 ответ
спросил 25 Окт, 17 от аноним
0 голосов
3 ответов
спросил 16 Март, 14 от 0ksana (240 баллов)
0 голосов
1 ответ
спросил 09 Фев, 13 от Dacota (120 баллов)
Управление продуктом: аналитика, разработка, продвижение