Перейти к содержимому


Правила форума

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


Еще один фильтр. Теперь на AJAX.


Сообщений в теме: 181

#1 badisoft

    Продвинутый пользователь

  • VIP
  • 5 052 сообщений
Репутация: 777
Мастер

Отправлено 09 марта 2014 - 18:01

Новый фильтр. Сделан с использованием AJAX, т.е. не перезагружает страницу для вывода результатов работы фильтра.


Традиционное спасибо всем, кто помогал мне (явно или путем сообщения об ошибках) в предыдущем фильтре. Без него не было бы этого.Советы, рекомендации, пожелания, сообщения об ошибках продолжают приветствоваться.


Краткое описание:
-----------------

- Как и предыдущий этот фильтр не требует в каждой категории задавать список разрешенных к показу характеристик, а строит этот список сам суммируя характеристики всех товаров категории.

- Как и предыдущий этот фильтр работает ТОЛЬКО с характеристиками товаров, заданными в виде вариантов характеристик. Т.е. с характеристиками в виде текстовой строки этот фильтр НЕ РАБОТАЕТ.

- При установке-снятии галки на лету меняются количественные показатели у остальных вариантов выбора.
Варианты с "нулевым" количеством товаров дизаблятся.

- При перемещении движка цен аналогично, но "нулевые" варианты не дизаблятся, а убираются.

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

- Я не стал (пока?) делать в этом фильтре изыски предыдущего (тип выбора - чекбосы, строка, селект, движки ).
По фактам установки предыдущего фильтра у меня сложилось уверенное впечатление, что никто этими возможностями не пользуется кроме заказчика возможности :). А все остальные просто оставляют дефолтовые чекбоксы, это самое удобное.

По сути, преимуществ перед штатным у этого фильтра всего два - выбор более одного варианта для характеристики и получение результата тут же, без нажатия кнопки "Показать" и перезагрузки страницы.

Ну а задание показа/непоказа характеристик в кратком/полном описаниях, бывшее в предыдущем фильтре и вообще к фильтру не относится, есть отдельный модуль на эту тему.


Установка проста до безобразия:
-------------------------------

1. копируем файлы (они не совпадают по имени со штатными, можно смело копировать).


filter.php -> core/includes/processor/
filter.tpl.html -> core/tpl/user/[шаблон]/
filter_new.tpl.html -> core/tpl/user/[шаблон]/blocks
jquery.blockui.js -> data/[шаблон]/
jquery.form.js -> data/[шаблон]/
loading.gif -> data/[шаблон]/


2. В head.tpl.html вписываем линки на jquery-ui и css от него. Ну и на сам jquery, если он еще не вписан

<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>


3. в файле index.php

строку

if ( in_array($_GET["do"], array( "captcha", "cart", "rss", "compare", "yandex", "invoice_jur", "invoice_phys", "stat", "get_file" ))) {


заменяем на

# BEGIN filter-ajax
#if ( in_array($_GET["do"], array( "captcha", "cart", "rss", "compare", "yandex", "invoice_jur", "invoice_phys", "stat", "get_file" ))) {
if ( in_array($_GET["do"], array( "captcha", "cart", "rss", "compare", "yandex", "invoice_jur", "invoice_phys", "stat", "get_file", "filter" ))) {
# END filter-ajax



4. в файле index.tpl.html задаем, куда и как выводить результат работы фильтра,
замещающий все содержимое блока с id="filterResult".

Например, если строки

{* вывод центральной страницы *}
{include file="$main_content_template"}

заменить на

<div id="filterResult">

{* вывод центральной страницы *}
{include file="$main_content_template"}

</div>

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

{* верхние блоки *}
{include file="blocks.tpl.html" binfo=$top_blocks bclass="hdbtop" balign="left"}
{* вывод центральной страницы *}
{include file="$main_content_template"}
{* нижние блоки *}
{include file="blocks.tpl.html" binfo=$bottom_blocks bclass="hdbtop" balign="left"}

на

<div id="filterResult">

{* верхние блоки *}
{include file="blocks.tpl.html" binfo=$top_blocks bclass="hdbtop" balign="left"}
{* вывод центральной страницы *}
{include file="$main_content_template"}
{* нижние блоки *}
{include file="blocks.tpl.html" binfo=$bottom_blocks bclass="hdbtop" balign="left"}

</div>

то список отфильтрованного заместит все центральное содержимое.


5. Создаем в "Управлении блоками" через "Добавить блок из файла" новый блок из файла filter_new.tpl.html


Посмотреть, как это работает можно на http://cpu.badisoft.ru - слева ниже большой красной кнопки "мобильная версия" есть блок "Новый фильтр на Аяксе" и в нем кнопка "Развернуть".

Прикрепленные файлы

  • Прикрепленный файл  filter-ajax.zip   32,19К   165 Количество загрузок:

http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#2 micehide

    Продвинутый пользователь

  • Assistent vsupport.ru
  • PipPipPip
  • 359 сообщений
Репутация: 124
Мастер

Отправлено 13 марта 2014 - 09:25

Просмотр сообщенияbadisoft сказал:

Посмотреть, как это работает можно на http://cpu.badisoft.ru
- не понял где там новый AJAX-фильтр? Вижу только "Расширенный" и два дополнительных наверху...

#3 badisoft

    Продвинутый пользователь

  • VIP
  • 5 052 сообщений
Репутация: 777
Мастер

Отправлено 13 марта 2014 - 16:01

Просмотр сообщенияmicehide сказал:

- не понял где там новый AJAX-фильтр? Вижу только "Расширенный" и два дополнительных наверху...
Под большой красной кнопкой слева "Мобильная версия сайта" находится блок "Новый фильтр на Аяксе" с маленькой синей кнопкой "Развернуть" :).
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#4 FusSheva

    Продвинутый пользователь

  • Assistent vsupport.ru
  • PipPipPip
  • 206 сообщений
Репутация: 7
Начинающий

Отправлено 15 марта 2014 - 20:11

Все таки не пошел. :(
Не активируется, (стоит в неактивном состоянии) и некоторые слова кракозябами цена от до и так далее.

Прикрепленный файл  IMG_15.03.2014-18.56.02.jpg   11,62К   48 Количество загрузок:

В чем может быть причина?
Каждый человек способен на многое. Но к сожалению, не каждый знает на что он способен.

#5 badisoft

    Продвинутый пользователь

  • VIP
  • 5 052 сообщений
Репутация: 777
Мастер

Отправлено 16 марта 2014 - 04:56

Просмотр сообщенияFusSheva сказал:

В чем может быть причина?
Да кто ж его знает? У меня работает, никому еще не ставил, накопленного экспириенса нет :).
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#6 FusSheva

    Продвинутый пользователь

  • Assistent vsupport.ru
  • PipPipPip
  • 206 сообщений
Репутация: 7
Начинающий

Отправлено 16 марта 2014 - 10:55

Попробовал в filter_new.tpl.html взять в literal выполнение скриптов

{literal}
<script type="text/javascript" src="/data/{$smarty.const.TPL}/jquery.blockui.js"></script>
<script type="text/javascript" src="/data/{$smarty.const.TPL}/jquery.form.js"></script>
{/literal}

Блок активировался, (появилась возможность выбора сколько страничек отображать и т.д.) но сами фильтры пропали. Сижу кумекаю дальше. :)
И почему кракозябы идут тоже не понятно. Хм...
Каждый человек способен на многое. Но к сожалению, не каждый знает на что он способен.

#7 Original001

    Новичок

  • Assistent vsupport.ru
  • Pip
  • 6 сообщений
Репутация: 0
Начинающий

Отправлено 23 марта 2014 - 06:00

Может глупый вопрос, но как открыть зазенденный index.php?

#8 FusSheva

    Продвинутый пользователь

  • Assistent vsupport.ru
  • PipPipPip
  • 206 сообщений
Репутация: 7
Начинающий

Отправлено 23 марта 2014 - 08:10

Просмотр сообщенияOriginal001 (23 марта 2014 - 06:00) писал:

Может глупый вопрос, но как открыть зазенденный index.php?
Никак. Это закодированный файл. Если открыть обычным блокнотом то вы увидите кучу непонятных символов. Раскодировать сам файл то можно, но не факт что в нем не будет ошибок. Так что ищите VIP версию движка. Или ищите отдельно этот файл раззенденый. Ну и за одно ищите еще и admin.php (пригодится).
Каждый человек способен на многое. Но к сожалению, не каждый знает на что он способен.

#9 Original001

    Новичок

  • Assistent vsupport.ru
  • Pip
  • 6 сообщений
Репутация: 0
Начинающий

Отправлено 23 марта 2014 - 12:53

Просмотр сообщенияFusSheva (16 марта 2014 - 10:55) писал:

И почему кракозябы идут тоже не понятно. Хм...
нашел решение проблемы: в файле filter.php нужно поменять UTF-8 на CP1251 в обоих строчках, чтобы получилось - echo iconv('CP1251','CP1251',$smarty->fetch("filter.tpl.html"));

#10 badisoft

    Продвинутый пользователь

  • VIP
  • 5 052 сообщений
Репутация: 777
Мастер

Отправлено 23 марта 2014 - 13:47

Просмотр сообщенияOriginal001 сказал:

нашел решение проблемы: в файле filter.php нужно поменять UTF-8 на CP1251 в обоих строчках, чтобы получилось - echo iconv('CP1251','CP1251',$smarty->fetch("filter.tpl.html"));
Если перекодировка не нужна, а при такой строке она отсутствует, то надо просто убрать перекодировку.
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#11 FusSheva

    Продвинутый пользователь

  • Assistent vsupport.ru
  • PipPipPip
  • 206 сообщений
Репутация: 7
Начинающий

Отправлено 23 марта 2014 - 15:29

И я наконец победил этот фильтр.
Чтобы активировался фильтр пришлось в начале файла filter_new.tpl.html сделать подгрузку AJAXа, а не в head.tpl.html как положено.
После этой процедуры фильтр начал работать.

Видать шаблон такой или в head.tpl.html много натыкано разных js скриптов (мешают один одному). :)
Во всяком случае сейчас порядок. Разрабу спсб.
Каждый человек способен на многое. Но к сожалению, не каждый знает на что он способен.

#12 badisoft

    Продвинутый пользователь

  • VIP
  • 5 052 сообщений
Репутация: 777
Мастер

Отправлено 23 марта 2014 - 15:56

Просмотр сообщенияFusSheva сказал:

Видать шаблон такой или в head.tpl.html много натыкано разных js скриптов (мешают один одному).
Скорее, где-то ниже head.tpl.html (а то и прямо в нем) есть еще одна подгрузка jquery, которая сносит предыдущую и, соответственно, все остальные библиотеки, требующие jquery. Проверить легко - нажать в ФайрФоксе Ctrl-U и поиском пройтись по HTML-коду в поисках лишних загрузок jquery. Исправить тоже легче легкого - грузить jquery вне head.tpl.html обязательно с проверкой, не загружен ли он уже.
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#13 FusSheva

    Продвинутый пользователь

  • Assistent vsupport.ru
  • PipPipPip
  • 206 сообщений
Репутация: 7
Начинающий

Отправлено 23 марта 2014 - 17:13

Дык, в том то и дело, что один модуль стоит и требует подключения одной версии jquery другой хочет другой версии.
А как их или объединить, или вообще, чтобы только один работал хз.

Пробовал ставить одну последнию версию, некоторые дополнения тогда просто не работают. Вот и приходится таким образом выкручиваться. :)

Еще есть не большой вопрос. Как в блоке уменьшить ширину (длину) ползунка цены?
Каждый человек способен на многое. Но к сожалению, не каждый знает на что он способен.

#14 badisoft

    Продвинутый пользователь

  • VIP
  • 5 052 сообщений
Репутация: 777
Мастер

Отправлено 23 марта 2014 - 17:46

Просмотр сообщенияFusSheva сказал:

Еще есть не большой вопрос. Как в блоке уменьшить ширину (длину) ползунка цены?
Например, так:
.ui-slider .ui-slider-handle { /* описание движков */
  width:5px;
  height:10px;
  top: -5px; /* вертикальное смещение движков относительно полоски */
  background:silver;
  cursor:pointer;
  border:1px solid grey;
}
.ui-slider-horizontal { /* описание полоски */
  height: 3px;
  width:180px;
  left:10px;
}

http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#15 Original001

    Новичок

  • Assistent vsupport.ru
  • Pip
  • 6 сообщений
Репутация: 0
Начинающий

Отправлено 24 марта 2014 - 06:22

А где можно взять развесистый фильтр прошлой версии? (с ползунками для доп категорий)
В статье указана ссылка на сайт, а там ссылка на форум :(

#16 badisoft

    Продвинутый пользователь

  • VIP
  • 5 052 сообщений
Репутация: 777
Мастер

Отправлено 24 марта 2014 - 12:39

Просмотр сообщенияOriginal001 сказал:

А где можно взять развесистый фильтр прошлой версии? (с ползунками для доп категорий)
Не знаю, что такое "с ползунками для доп категорий", но вот: http://vsupport.ru/t...dpost__p__30295
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#17 Original001

    Новичок

  • Assistent vsupport.ru
  • Pip
  • 6 сообщений
Репутация: 0
Начинающий

Отправлено 24 марта 2014 - 15:37

Просмотр сообщенияbadisoft (24 марта 2014 - 12:39) писал:

Не знаю, что такое "с ползунками для доп категорий"
Изображение
неправильно выразился: доп характеристик, а не категорий

Просмотр сообщенияbadisoft (24 марта 2014 - 12:39) писал:

а ссылка как раз на ту тему с развесистым фильтром, который мне нужен, но не пойму, где скачать

#18 badisoft

    Продвинутый пользователь

  • VIP
  • 5 052 сообщений
Репутация: 777
Мастер

Отправлено 24 марта 2014 - 18:32

Просмотр сообщенияOriginal001 сказал:

а ссылка как раз на ту тему с развесистым фильтром, который мне нужен, но не пойму, где скачать
Вы даже вопрос в соответствующей модулю теме задать не можете (и засоряете эту), где уж про скачивание понять...
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#19 Kyborg

    Продвинутый пользователь

  • Assistent vsupport.ru
  • PipPipPip
  • 31 сообщений
Репутация: 1
Начинающий

Отправлено 01 апреля 2014 - 21:08

После установки модуля столкнулся со следующей проблемой, при выборе чекбокса "автопоказ" (в начале, не выбирая другие параметры), автоматом выводиться весь товар магазина, но если его много, в нижней части где навигация по страницам получается нагромождение.

Выглядит это так:

Прикрепленный файл  Без-имени-2.jpg   87,63К   42 Количество загрузок:

Как я понял, правиться это в файле filter.php:

if ($prdcount > $prdPerPage)
    {
    if ($start > 0) $nav = "<a href='#' onclick='go2page(".max($start-$prdPerPage,0).");'>&lt;&lt; пред</a>&nbsp;&nbsp";
    else $nav = "<span style='color:grey'>&lt;&lt; пред</span>&nbsp;&nbsp";
    $n = 1;
    for ($i=0; $i<$prdcount; $i+=$prdPerPage)
	    {
	    $nav .= ($i==$start)?("<b>".$n++."</b>"):("<a href='#' onclick='go2page(".$i.")'>".$n++."</a>");
	    $nav .= (($n + 39) % 25)?"&nbsp;&nbsp":"<br>";
	    $lastOffset = $i;
	    }
    if ($start < $lastOffset) $nav .= "<a href='#' onclick='go2page(".min($start+$prdPerPage,$prdcount).");'>след &gt;&gt;</a>";
    else $nav .= "<span style='color:grey'>след &gt;&gt;</span>";
    }

Как это можно исправить или что нужно править подскажите?

P.S.
Хороший и быстрый фильтр. Думаю было бы неплохо дополнить этот фильтр, функциями как в предыдущем, чтобы можно было выбирать вывод характеристик в виде слайдера, селекта и т.д.

#20 badisoft

    Продвинутый пользователь

  • VIP
  • 5 052 сообщений
Репутация: 777
Мастер

Отправлено 01 апреля 2014 - 21:47

Цитата

Как это можно исправить или что нужно править подскажите?
У меня там специально сделан перенос строки, если все страницы не умещаются на одну строку. Но если даже строк получается много, то надо менять двухуровневую навигацию на трехуровневую, т.е. делать "список строк со списком страниц". Т.к. это довольно уникальная ситуация (другими словами, нахрен никому не нужно кроме Вас), то я не вижу решения кроме коммерческого.

Просмотр сообщенияKyborg сказал:

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

PS. Мне "список строк со списком страниц" видится как набор селектов. Как традиционный навигатор со списком страниц, только вместо ссылки на страницу будет select со списком, скажем, десятка страниц. Первый селект со страницами 1-10, второй со страницами 11-20 и так далее. Но это только идея. Реализуйте, идею я дал.

PPS. Коллеги, а вы что думаете про этот фильтр? Он написан, как и предыдущий фильтр, как и простейший ЧПУ "на энтузазизьме", никто за него не платил. Просто мне было интересно написать. Вроде, получилось неплохо, но ведь это лишь заготовка. Чего в нем не хватает?/
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)