Шаблон компонента настройки условий отбора
Пример шаблона компонента настройки условий выбора.
Обратите внимание, в шаблоне подключается библиотека landing.uifilterconverter.
template.php
<? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); \Bitrix\Main\UI\Extension::load('landing.uifilterconverter'); // фильтр $APPLICATION->includeComponent( 'bitrix:main.ui.filter', '', $arResult['FILTER'], // все параметры для main.ui.filter должны быть подготовлены в компоненте $component, ['HIDE_ICONS' => true] ); // показ отобранных элементов источника $APPLICATION->IncludeComponent( 'bitrix:main.ui.grid', '', $arResult['GRID'], // все параметры для main.ui.grid должны быть подготовлены в компоненте $component, ['HIDE_ICONS' => true] ); $APPLICATION->IncludeComponent( 'bitrix:ui.button.panel', '', [ 'BUTTONS' => [ ['TYPE' => 'save'], ['TYPE' => 'cancel'] ], 'ALIGN' => 'center' ], $component, ['HIDE_ICONS' => true] ); $filterSettings = [ 'defaultFilter' => [], // фильтр по умолчанию. необходим, если администратор нажмет Сохранить, ничего не настраивая ]; ?> <script type="text/javascript"> BX.ready(function() { MySelector.create( '<?=\CUtil::jsEscape($arResult['FILTER']['FILTER_ID']); ?>', // ИД_фильтра <?=\CUtil::PhpToJSObject($filterSettings, false, true, false); ?> ); }); </script>
script.js
(function(){ var BX = window.BX; if (MySelector) { return; } MySelector = function() { this.id = ''; this.filter = []; }; MySelector.create = function(id, settings) { var self = new MySelector(); self.initialize(id, settings); return self; }; MySelector.prototype = { initialize: function (id, settings) { this.id = id; this.settings = { defaultFilter: [] }; this.converterSettings = {}; if (BX.type.isPlainObject(settings)) { if (BX.type.isArray(settings.defaultFilter)) this.settings.defaultFilter = settings.defaultFilter; } this.converter = new BX.Landing.UiFilterConverter({ filterId: this.id }); this.loadFilter(); // при нажатии на Применить в фильтре обновляем данные BX.addCustomEvent('BX.Main.Filter:apply', BX.proxy(this.applyFilter, this)); // Обработчик кнопки слайдера Сохранить BX.addCustomEvent(BX.UI.ButtonPanel, 'button-click', function(button) { var currentSlider; if (BX.type.isNotEmptyObject(button)) { if (button.TYPE === 'save') // если нажали на Сохранить в слайдере, надо передать результаты { // собственно, передача top.BX.SidePanel.Instance.postMessageTop(window, 'save', { filter: this.filter }); // закрытие слайдера - его необходимо делать самостоятельно currentSlider = top.BX.SidePanel.Instance.getSliderByWindow(window); if(currentSlider) { currentSlider.close(true); top.BX.SidePanel.Instance.destroy(currentSlider.getUrl()); } currentSlider = null; } } }.bind(this)); }, loadFilter: function() { this.filter = this.converter.getFilter(); if (this.filter.length === 0) this.filter = this.settings.defaultFilter; }, applyFilter: function(eventFilterId, values, ob, filterPromise, filterParams) { if (eventFilterId !== this.id) { return; } this.loadFilter(); } }; })();
© «Битрикс», 2001-2024, «1С-Битрикс», 2024