Основная идея:
есть компонент (component.php) со своей логикой выборки и обновления данных.
есть шаблон, где подключены компоненты bitrix:main.ui.filter и bitrix:main.ui.grid - они только отображают полученные данные и реализуют интерфейс для взаимодействия с сервером (отправка запросов происходит через js шаблона либо штатными методами грида)
итак, вот примеры вызова наших компонентов в шаблоне (templates.php):
<? $APPLICATION->IncludeComponent('bitrix:main.ui.filter', '', [ 'FILTER_ID' => $arResult['GRID']['ID'].'_filter', 'GRID_ID' => $arResult['GRID']['ID'], 'FILTER' => $arResult['GRID']['FILTER'], 'ENABLE_LIVE_SEARCH' => true, 'ENABLE_LABEL' => true ]); ?> |
<? $APPLICATION->IncludeComponent( 'bitrix:main.ui.grid', '', [ 'GRID_ID' => $arResult['GRID']['ID'], 'COLUMNS' => $arResult['GRID']['COLUMNS'], 'ROWS' => $arResult['GRID']['DATA'], 'SHOW_ROW_CHECKBOXES' => true, 'NAV_OBJECT' => $arResult['GRID']['NAV'], 'AJAX_MODE' => 'Y', 'AJAX_ID' => \CAjax::getComponentID('bitrix:main.ui.grid', '.default', ''), 'PAGE_SIZES' => [ ['NAME' => "5", 'VALUE' => '5'], ['NAME' => '10', 'VALUE' => '10'], ['NAME' => '20', 'VALUE' => '20'], ['NAME' => '50', 'VALUE' => '50'], ['NAME' => '100', 'VALUE' => '100'] ], 'AJAX_OPTION_JUMP' => 'N', 'SHOW_CHECK_ALL_CHECKBOXES' => true, 'SHOW_ROW_ACTIONS_MENU' => true, 'SHOW_GRID_SETTINGS_MENU' => true, 'SHOW_NAVIGATION_PANEL' => true, 'SHOW_PAGINATION' => true, 'SHOW_SELECTED_COUNTER' => true, 'SHOW_TOTAL_COUNTER' => true, 'SHOW_PAGESIZE' => true, 'SHOW_ACTION_PANEL' => true, 'ACTION_PANEL' => $arResult['GRID']['ACTION_PANEL'], 'ALLOW_COLUMNS_SORT' => true, 'ALLOW_COLUMNS_RESIZE' => true, 'ALLOW_HORIZONTAL_SCROLL' => true, 'ALLOW_SORT' => true, 'ALLOW_PIN_HEADER' => true, 'AJAX_OPTION_HISTORY' => 'N', "SORT" => $arResult['GRID']["SORT"], "SORT_VARS" => $arResult['GRID']["SORT_VARS"], "FOOTER" => array(array("title" => "Всего", "value" => $arResult['GRID']["ROWS_COUNT"])), "FILTER" => $arResult['GRID']["FILTER"], ] ); ?> |
Можно заметить, что вся информация по гридам разнесена в свойстве массива $arResult['GRID'] - это позволит интегрировать гриды в дефолтные компоненты без ущерба другим шаблонам.
Чуть позже найду время расписать все параметры этих компонентов (ведь их тоже нигде не найти в открытом виде)
Я передал вот такое:
$grid_options = new Bitrix\Main\Grid\Options('ndt_checkups');
$sort = $grid_options->GetSorting(['sort' => ['NAME' => 'DESC'], 'vars' => ['by' => 'by', 'order' => 'order']]);
$nav_params = $grid_options->GetNavParams();
$nav = new Bitrix\Main\UI\PageNavigation('ndt_checkups');
$nav->allowAllRecords(true)
->setPageSize($nav_params['nPageSize'])
->initFromUri();
Навигация не считает страницы.
if ("LIMITS"){
$ob_nav = new \Bitrix\Main\UI\PageNavigation($this->arResult['GRID']['ID']);
$ob_nav->allowAllRecords(true);
$ob_nav->setPageSize($this->arResult['GRID']['NAV']['nPageSize']);
$ob_nav->initFromUri();
$this->arResult['GRID']['NAV'] = $ob_nav;
}
"SORT" => $arResult['GRID']["SORT"],
"SORT_VARS" => $arResult['GRID']["SORT_VARS"]
что заложено в этих массивах?
А в параметр SORT не актуален вроде... В NAV_OBJECT передается объект сортировки который нужно обрабатывать на сервере..