Версии: 3.x, 2.x.
В данной статье рассказывается, каким образом создать панель фильтров для раздела.
Фильтры задаются в файле structure.xml раздела в теге FILTERS. Каждый фильтр описывается тегом ITEM. Теги могут иметь вложенную структуру, то есть фильтр может содержать в себе другие фильтры. Каждый фильтр имеет следующий набор атрибутов.
Атрибут | Обязателен | Назначение |
---|---|---|
caption | Да | Название фильтра |
item_style | Нет | Строка, содержащая свойство CSS стиля элемента. С помощью данного атрибута можно раскрасить или сделать жирным текст фильтра. |
where_clause | Нет | Текст условия where, которое будет добавлено к запросу. |
default_selected | Да | Если данный атрибут имеет значение yes , то этот фильтр будет выбран по умолчанию. |
При написании условия фильтра можно использовать только те таблицы, которые «присоединены» в основной таблице в теге GRID. Если нужно использовать в запросе таблицу, которая не выводится в таблице интерфейса, то нужно добавить ее как невидимую колонку. Для этого в описании колонки нужно добавить атрибут display_type = none
. В этом случае она не будет отображаться в таблице.
Создадим панель фильтров в разделе «Автомобили» со следующими фильтрами.
Данная панель фильтров будет описываться следующими XML тегами.
<FILTERS>
<ITEM caption="Все автомобили" item_style="font-weight: bold;" where_clause="1=1" default_selected="yes"/>
<ITEM caption="Тип" item_style="font-weight: bold;" where_clause="">
<ITEM caption="Седан" item_style="" where_clause="AT.Name='Седан'"/>
<ITEM caption="Хечбек" item_style="" where_clause="AT.Name='Хечбек'"/>
<ITEM caption="Универсал" item_style="" where_clause="AT.Name='Универсал'"/>
</ITEM>
<ITEM caption="Мощность" item_style="font-weight: bold;" where_clause="">
<ITEM caption="Менее 75 л.с." item_style="" where_clause="T0.power < 75"/>
<ITEM caption="От 75 до 100 л.с." item_style="" where_clause="(T0.power >= 75) and (T0.power < 100)"/>
<ITEM caption="Более 100 л.с." item_style="" where_clause="T0.power >= 100"/>
</ITEM>
<ITEM caption="Дата выпуска" item_style="font-weight: bold;" where_clause="">
<ITEM caption="Текущий месяц" item_style="" where_clause="date_part('month', builddate) = date_part('month', now()) and date_part('year', builddate) = date_part('year', now())"/>
<ITEM caption="Прошлый месяц" item_style="" where_clause="date_part('month', builddate)+1 = date_part('month', now()) and date_part('year', builddate) = date_part('year', now())"/>
<ITEM caption="Прошлый год" item_style="" where_clause="date_part('year', builddate)+1 = date_part('year', now())"/>
</ITEM>
</FILTERS>
Примечание! Для того, чтобы в условиях использовать символы <
и >
, необходимо писать вместо них соответствующие escape последовательности <
и >
, так как данные символы являются управляющими и используются для указания тегов.
Фильтр «Тип» использует таблицу справочника iris_AutoType. Она уже присоединена в таблице (см. поле «Тип» таблицы). Также, у этой таблицы установлен алиас AT (row_type_alias = AT) по которому к ней будет производится обращение в фильтре. Если бы алиас таблицы не был указан, то можно было использовать тот алиас, который бы сформировался автоматически. Формирование алиасов происходит следующим образом: основная таблица всегда имеет алиас T0. Последующие справочные таблицы имеют алиасы T1, T2, …, Tn в порядке следования описаний их колонок в XML описании таблицы. Если бы в таблице не было бы колонки «Тип», то нужно было бы добавить невидимую колонку «Тип» для использования ее в фильтре.
<ITEM db_field="AutotypeID" caption="Тип" width="15%" row_type="fk_column" row_type_parent_table="iris_AutoType" row_type_parent_display_column="Name" display_type="none"/>
Обратим внимание на созданные фильтры.
Фильтр «Все автомобили». Этот фильтр особый. У него условие where=(1=1)
– такой фильтр при выборе снимает все остальные фильтры. Таким образом, данный фильтр отображает все автомобили. Также у данного фильтра установлен атрибут default_selected = yes
, это означает, что данный фильтр будет применяться по умолчанию. То есть, при выбора раздела в нем будут изначально показываться все автомобили.
Фильтры «Тип», «Мощность», «Дата выпуска» — данные фильтры являются просто группами. У них условие where
пусто. Поэтому данные фильтры нельзя выбрать. Если данным фильтрам указать условие выборки, то тогда их можно будет выбрать.
Остальные фильтры содержат различные условия фильтрации в соответствии со своими названиями.
Более подробно о функциях работы с датами можно посмотреть в онлайн документации к PostgreSQL.