filters.jpg 56,31К 33 Количество загрузок:
Код проверен на версии 1.9.3. Принцип формирования следующий: если выбрать фильтры, отбирающие записи по одному полю (тип->"Клиенты", тип->"Партнеры" и т.д.), запросы объединяются посредством OR - будут отобранны и Клиенты и Партнеры. Если выделенные фильтры отбирают записи по разным полям (тип->"Клиенты", статус->"Новый") - используется AND - результатом будут только Новые Клиенты.
Для работы скрипта необходимо добавить пустой фильтр с именем "un". Фильтр лучше скрыть во вкладке Доступ. В любое поле, отображаемое в таблице (фильтры будут отображаться только при выводе таблицы, содержащее это поле) добавить следующий php-код:
global $smarty; $mysrc = ' function pageloaded(){ //код из процедуры pageloaded; window.onresize=on_window_resize; on_window_resize(); on_table_load_fixing(); // сбрасываем снова скролл window.onscroll=onMyScroll; onMyScroll(); page_loaded=1; // Изменение отображения фильтров при загрузке страницы var filter_innerHTML=document.getElementById("filters").innerHTML; //Добавляем форму filter_innerHTML="<form id=\"filter_form\" action=\"/cb_modules/filter.php\" method=\"post\">" + filter_innerHTML + "<input type=\"submit\" name=\"btnFilter\" value=\"Применить фильтр\"></form>"; // Добавляем поля checkbox var reg=/(<a.+filter=([0-9]+).+<\/a>)/img; var filter_newHTML=filter_innerHTML.replace(reg, "<table cellpadding=\"0\" cellspacing=\"0\" style=\"border:1px solid gray;\"><tr><td>$1</td><td><input name=\"filter$2\" type=\"checkbox\" value=\"$2\"></td></tr></table>"); // Выделяем активное поле checkbox галочкой //reg=/(<strong.*)(<input)/i; //filter_newHTML=filter_newHTML.replace(reg,"$1 $2 checked"); //Скрываем фильтр "un" reg=/(<table.+un.+<\/table>)/img; filter_newHTML=filter_newHTML.replace(reg, ""); document.getElementById("filters").innerHTML=filter_newHTML; }'; $smarty->assign('ADDITIONAL_JAVASCRIPT' , $mysrc);
В корневой папке сайта создать папку "cb_modules" и положить в нее следующий файл
filter.php 3,64К 9 Количество загрузок:
Недостатки:
1. комбинируются только предопределенные фильтры;
2. строка запроса записывается в фильтр un, который является общим для всех пользователей, т.е. при обновлении страницы в браузере, например через F5, пользователь может увидеть не те данные, которые он запрашивал, если фильтром воспользовался другой пользователь;
3. наблюдается некоторая заторможенность страницы
4. сложные фильтры будут выведены только на странице с таблицей, которая содержит вычисляемое поле с кодом, прописанном выше.
5. сложные фильтры не отображаются, если результат не содержит записей (поскольку вычисляемое поле не выводится - код не отрабатывает)