Создание панели фильтров

Версии: 3.x, 2.x.

В данной статье рассказывается, каким образом создать панель фильтров для раздела.

Фильтры задаются в файле structure.xml раздела в теге FILTERS. Каждый фильтр описывается тегом ITEM. Теги могут иметь вложенную структуру, то есть фильтр может содержать в себе другие фильтры. Каждый фильтр имеет следующий набор атрибутов.

Атрибут Обязателен Назначение
caption Да Название фильтра
item_style Нет Строка, содержащая свойство CSS стиля элемента. С помощью данного атрибута можно раскрасить или сделать жирным текст фильтра.
where_clause Нет Текст условия where, которое будет добавлено к запросу.
default_selected Да Если данный атрибут имеет значение yes, то этот фильтр будет выбран по умолчанию.

При написании условия фильтра можно использовать только те таблицы, которые «присоединены» в основной таблице в теге GRID. Если нужно использовать в запросе таблицу, которая не выводится в таблице интерфейса, то нужно добавить ее как невидимую колонку. Для этого в описании колонки нужно добавить атрибут display_type = none. В этом случае она не будет отображаться в таблице.

Создадим панель фильтров в разделе «Автомобили» со следующими фильтрами.

Настройка фильтров в IRIS CRM

Данная панель фильтров будет описываться следующими 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 &lt; 75"/>
        <ITEM caption="От 75 до 100 л.с." item_style="" where_clause="(T0.power &gt;= 75) and (T0.power &lt; 100)"/>
        <ITEM caption="Более 100 л.с." item_style="" where_clause="T0.power &gt;= 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 последовательности &lt; и &gt;, так как данные символы являются управляющими и используются для указания тегов.

Фильтр «Тип» использует таблицу справочника 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.