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. сложные фильтры не отображаются, если результат не содержит записей (поскольку вычисляемое поле не выводится - код не отрабатывает)














