Form - фильтр

Комментарии ()

Як показала практика, скрипт-модуля повинен сам строїти потрібний sql-запрос, на основі отриманих даних від фільтра. Оскільки варіант із like'ами не підходить

При выводе информации, кроме постраничной навигации очень часто возникает необходимость отфильтровать даные по определенным признакам.

Фильтр характеризуется названием формы (для каждой формы свой фильтр $_SESSION['form_filter'][$name]). Заданые критерии хранятся в сессии ($_SESSION['form_filter'][$name]=array(key=>value), где key - название поля в таблице БД, а value соотвественно его значение.), что дает возможность сохранять работоспособность фильтра, даже при перезагрузке страницы. Елементы ввода фильтра работают в режима автодополнения.

html

<form id="form_users" class="form-inline" method="post" action="#">

<input type="text" name="login" id="login" value=""   width="" style="" class="autocomplete form_filter_element" placeholder="введите Логин" data-table="users" data-field="login"  >
...

<button type="button" class="btn form_filter_button" data-form="form_users" data-name="users">Найти</button>

</form>

Требования к форме фильтра:

  • Задать id формы (id="form_users")
  • Все елементы ввода фильтра, которые участвуют в фильтрации, должны иметь класс form_filter_element ( class="... form_filter_element ...")
  • Включаем режим автодополнения
  • Кнопка фильтрации, должна иметь класс form_filter_button (class="... form_filter_button ..."), а также атрибуты data-form с названием самой формы фильтра и data-name с названием фильтра

Алгоритм работы

  • Фильтрация.При click на кнопку фильтрации выполняется функция $(".form_filter_button").click(файл system.js), которая читает названия елементов вводу классу form_filter_element и их значения в асоциативный массив. Далее выполняент ajax-запрос form_set_filter, задавая критерии фильтрации (сохранение которых выполняется в сессии). Если ajax-запрос прошел успешно - перезагрузка страницы.
  • Вывод фильтрованой информации. Для удобства задаем название фильтра
    $filter_name='users';
    В sql запрос необходимо вставить строку после WHERE, которую получаем так
    $filter_sql=$form->getFilterSqlString($filter_name);
    if ($filter_sql<>'') $filter_sql=' AND '.$filter_sql;
    
    Получение сохраненого критерия (если он существует)
    $form->getFilterKey('{filter_name}', '{element_name}')
    Пример:
    #elementFirstName
    $array = array(
        'group_flag' => false, 
        'element_type' => 'text', 
        'element_name' => 'first_name',
        'element_alias' => null,
        'element_label' => '',
        'element_readonly' => false,
        'element_disabled' => false,
        'element_style' => null,
        'element_width' => null,
        'element_placeholder' => 'введите Имя',
        'element_attr_data' => array('table'=>'users','field'=>'first_name'),        
        'element_class' => 'autocomplete form_filter_element',        
        'element_value' => $form->getFilterKey($filter_name, 'first_name')
    );

Webit.in.ua 2013