Основная идея:
есть компонент (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 передается объект сортировки который нужно обрабатывать на сервере..