Модуль webdav - библиотека документов.
Выглядит как список документов некоего инфоблока и отдельная панелька фильтров поиска по данным документам (инфоблоку)
Задача: у инфоблока имеются дополнительные свойства - нужно иметь возможность фильтровать по данным свойствам
Проблема: Пользовательские фильтры не работают.
Сразу замечу, что разработчики и не предполагали, что можно настраивать фильтры по списку документов... хотя идея, вроде бы, лежит на поверхности - настроить те фильтры, по которым будем искать элементы. В пользу этого говорит тот факт, что фильтры настраиваются только изнутри кода компонента: webdav.section.list/component.php.
На 180 строке данного компонента идёт настройка стандартных фильтров:
Я добавляю два собственных фильтра - входящий и исходящий документы (которые, по сути, являются доп. свойствами инфоблока):
Два новых фильтра успешно появляются на панели... выбираются... даже сохраняются при переходах внутри папок документов и попадают в результирующий массив фильтрации - $arFilter:
Но... они не работают. Фильтрация не осуществляется! Хотя фильтрация осуществляется по таким полям, как "WF_LOCK_STATUS", которые описаны в API,
как стандартный функционал фильтров... Но фильтр по доп. свойствам инфоблока не осуществляется, хотя эти свойства успешно приходят
в результирующий массив.
Объекты и функции, которые подготавливают массив фильтров:
CGridOptions::GetFilter
и вытаскивают элементы из инфоблока:
$res = $ob->PROPFIND($options, $files, array("FILTER" => $arFilter, "COLUMNS" => $arSelectedFields, "return" => "nav_result", "get_clones" => "Y");
(класс "СWebDavIblock" в API не описаны и даже не упоминаются.
Единственный выход который нашёл - фильтровать ещё раз результат уже своими функциями.
Кто сталкивался с данной проблемой или может подсказать решение - крайне буду рад любой помощи.
Выглядит как список документов некоего инфоблока и отдельная панелька фильтров поиска по данным документам (инфоблоку)
Задача: у инфоблока имеются дополнительные свойства - нужно иметь возможность фильтровать по данным свойствам
Проблема: Пользовательские фильтры не работают.
Сразу замечу, что разработчики и не предполагали, что можно настраивать фильтры по списку документов... хотя идея, вроде бы, лежит на поверхности - настроить те фильтры, по которым будем искать элементы. В пользу этого говорит тот факт, что фильтры настраиваются только изнутри кода компонента: webdav.section.list/component.php.
На 180 строке данного компонента идёт настройка стандартных фильтров:
Код |
---|
$arResult["FILTER"] = array(); $arResult["FILTER"][] = array("id" => "content", "name" => GetMessage("WD_TITLE_CONTENT"), "default" => true, "type" => "search"); $arResult["FILTER"][] = array("id" => "timestamp", "name" => GetMessage("WD_WHEN"), "default" => true, "type" => "date"); $arFileTypes = @unserialize(COption::GetOptionS tring("webdav", "file_types")); $arFilterFileTypes = array("" => ""); if ($arFileTypes !== false) { foreach ($arFileTypes as $arFileType) { $arFilterFileTypes[$arFileType["ID"]] = $arFileType["NAME"]; } $arResult["FILTER"][] = array("id" => "doctype", "default" => true, "name" => GetMessage("WD_DOCTYPE"), "type" => "list", "items" => $arFilterFileTypes); } $arResult["FILTER"][] = array("id" => "?TAGS", "name" => GetMessage("WD_TITLE_TAGS"), "type" => "tags"); $arResult["FILTER"][] = array("id" => "user", "enable_settings" => false, "name" => GetMessage("WD_WHO"), "type" => "user"); $arResult["FILTER"][] = array("id" => "FILE_SIZE", "name" => GetMessage("WD_TITLE_FILE_SIZE"), "type" => "number"); $arResult["FILTER"][] = array("id" => "WF_LOCK_STATUS", "name" => GetMessage("WD_LOCK_STATUS"), "type" => "list", "items" => array( "" => "", "yellow" => GetMessage("WD_DOCSTATUS_YELLOW"), "red" => GetMessage("WD_DOCSTATUS_RED"), "green" => GetMessage("WD_DOCSTATUS_GREEN") )); |
Код |
---|
$arResult['FILTER'][] = array('id' => 'PROPERTY_120_VALUE', 'name' => GetMessage('IF_IncomingFilter_Status'), 'type' => 'list', 'items' => array( '' => '', 'yes' => GetMessage('IF_Filter_Yes'), 'no' => GetMessage('IF_Filter_No'), )); $arResult['FILTER'][] = array('id' => 'PROPERTY_121_VALUE', 'name' => GetMessage('IF_OutcomingFilter_Status'), 'type' => 'list', 'items' => array( '' => '', 'yes' => GetMessage('IF_Filter_Yes'), 'no' => GetMessage('IF_Filter_No'), )); |
Два новых фильтра успешно появляются на панели... выбираются... даже сохраняются при переходах внутри папок документов и попадают в результирующий массив фильтрации - $arFilter:
Код |
---|
Array ( [PROPERTY_120_VALUE] => yes [PROPERTY_121_VALUE] => no [FILE_SIZE_multiply] => b ) |
Но... они не работают. Фильтрация не осуществляется! Хотя фильтрация осуществляется по таким полям, как "WF_LOCK_STATUS", которые описаны в API,
как стандартный функционал фильтров... Но фильтр по доп. свойствам инфоблока не осуществляется, хотя эти свойства успешно приходят
в результирующий массив.
Объекты и функции, которые подготавливают массив фильтров:
CGridOptions::GetFilter
и вытаскивают элементы из инфоблока:
$res = $ob->PROPFIND($options, $files, array("FILTER" => $arFilter, "COLUMNS" => $arSelectedFields, "return" => "nav_result", "get_clones" => "Y");
(класс "СWebDavIblock" в API не описаны и даже не упоминаются.
Единственный выход который нашёл - фильтровать ещё раз результат уже своими функциями.
Кто сталкивался с данной проблемой или может подсказать решение - крайне буду рад любой помощи.