Фильтрация записей в субпанелях

1. Включение фильтрации в субпанели

По умолчанию фильтровать записи можно в субпанели ИСТОРИЯ, что может быть удобно для быстрого нахождения необходимой информации в случае большого количества записей.

При необходимости можно настроить фильтрацию и для других субпанелей.

Для этого в файл subpaneldefs.php соответствующего модуля добавляется строка:

['widget_class' => 'SubPanelTopFilterButton'],

В следующем примере фильтрация добавляется в субпанель Контакты модуля Контрагенты.

Для этого добавьте указанную выше строку в файл public/legacy/Accounts/metadata/subpaneldefs.php

        'contacts' => array(
            'order' => 30,
            'module' => 'Contacts',
            'sort_order' => 'asc',
            'sort_by' => 'last_name, first_name',
            'subpanel_name' => 'ForAccounts',
            'get_subpanel_data' => 'contacts',
            'add_subpanel_data' => 'contact_id',
            'title_key' => 'LBL_CONTACTS_SUBPANEL_TITLE',
            'top_buttons' => array(
                array('widget_class' => 'SubPanelTopCreateAccountNameButton'),
                ['widget_class' => 'SubPanelTopFilterButton'], // добавление кнопки фильтра
                array('widget_class' => 'SubPanelTopSelectButton', 'mode' => 'MultiSelect')
            ),
        ),

В панели администратора выполните быстрое восстановление.

После чего в субпанели появится кнопка Фильтр:

Добавление фильтра в субпанель

По умолчанию для фильтрации используются поля Расширенного фильтра.

Стандартные поля расширенного фильтра

Для фильтрации заполните необходимы поля и нажмите на кнопку Найти.
Для сброса фильтра нажмите на кнопку Очистить.

Значения установленного фильтра не сохраняются: после обновление страницы фильтр очистится и субпанель отобразит полный перечень записей.

2. Настройка полей для фильтрации

Некоторые субпанели не могут быть настроены через интерфейс системы и не имеют настроенных полей для фильтрации (например - Мероприятия, Журнал маркетинговой кампании и т. д.), поэтому при попытке фильтрации вы можете получить ошибку, либо не увидите полей фильтрации при включении фильтра.

Если субпанель можно настроить через интерфейс системы, то для настройки фильтров воспользуйтесь Студией.

Настройку полей для фильтрации через редактирование кода можно сделать следующими способами (после настройки не забудьте выполнить быстрое восстановление):

2.1. Добавление файла searchdefs.php

Настаиваемые в файле searchdefs.php поля для фильтрации будут отображаться по умолчанию во всех аналогичных субпанелях модулей, если иные настройки не прописаны в файле subpaneldefs.php конкретного модуля. Например, субпанель Контрагенты во всех модулях будет содержать поля для фильтрации, указанные в массиве advanced_search. В данном примере для модуля Контрагенты используется файл public/legacy/modules/Accounts/metadata/searchdefs.php:

$searchdefs ['Accounts'] =
    array(
        'templateMeta' =>
            array(
                'maxColumns' => '3',
                'maxColumnsBasic' => '4',
                'widths' =>
                    array(
                        'label' => '10',
                        'field' => '30',
                    ),
            ),
        'layout' =>
            array(
                'basic_search' =>
                    array(
                        'name' =>
                            array(
                                'name' => 'name',
                                'default' => true,
                                'width' => '10%',
                            ),
                        'current_user_only' =>
                            array(
                                'name' => 'current_user_only',
                                'label' => 'LBL_CURRENT_USER_FILTER',
                                'type' => 'bool',
                                'default' => true,
                                'width' => '10%',
                            ),
                        'favorites_only' => array(
                            'name' => 'favorites_only',
                            'label' => 'LBL_FAVORITES_FILTER',
                            'type' => 'bool',
                        ),
                    ),
                'advanced_search' => // поля расширенного фильтра
                    array(
                        'name' =>
                            array(
                                'name' => 'name',
                                'default' => true,
                                'width' => '10%',
                            ),
                        'website' =>
                            array(
                                'name' => 'website',
                                'default' => true,
                                'width' => '10%',
                            ),...

2.2. Изменение файла subpaneldefs.php

В этом случае поля фильтрации настраиваются для конкретной субпанели выбранного модуля. Например, для настройки фильтрации в субпанели Мероприятия модуля Контрагенты измените файл public/legacy/modules/Accounts/metadata/subpaneldefs.php

$layout_defs['Accounts'] = array(
    // перечень субпанелей, отображаемых в Форме просмотра
    'subpanel_setup' => array(

        'activities' => array(
            'order' => 10,
            'sort_order' => 'desc',
            'sort_by' => 'date_due',
            'title_key' => 'LBL_ACTIVITIES_SUBPANEL_TITLE',
            'type' => 'collection',
            'subpanel_name' => 'activities',
            'header_definition_from_subpanel' => 'meetings',
            'module' => 'Activities',

            'top_buttons' => array(
                array('widget_class' => 'SubPanelTopCreateTaskButton'),
                array('widget_class' => 'SubPanelTopScheduleMeetingButton'),
                array('widget_class' => 'SubPanelTopScheduleCallButton'),
                array('widget_class' => 'SubPanelTopFilterButton'), // добавление кнопки фильтра
                array('widget_class' => 'SubPanelTopComposeEmailButton'),
            ),

               'searchdefs' => array(
                'collection' => // фильтр по типу мероприятия
                    array(
                        'name' => 'collection',
                        'label' => 'LBL_COLLECTION_TYPE',
                        'type' => 'enum',
                        'options' => 'collection_temp_list',
                        'default' => true,
                        'width' => '10%',
                    ),...

После чего в субпанели будет доступна фильтрация по типу мероприятия:

Фильтрация по типу мероприятия

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.