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


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


  • Вы не можете ответить в тему
Сообщений в теме: 187

#1 badisoft

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

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 09 March 2014 - 06:01 PM

Новый фильтр. Сделан с использованием 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К   170 Количество загрузок:

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

#2 micehide

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

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

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

Посмотреть, как это работает можно на http://cpu.badisoft.ru

- не понял где там новый AJAX-фильтр? Вижу только "Расширенный" и два дополнительных наверху...
  • 0

#3 badisoft

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

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 13 March 2014 - 04:01 PM

- не понял где там новый AJAX-фильтр? Вижу только "Расширенный" и два дополнительных наверху...

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

#4 FusSheva

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

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

Отправлено 15 March 2014 - 08:11 PM

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

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

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

#5 badisoft

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

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

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

В чем может быть причина?

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

#6 FusSheva

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

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

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

Попробовал в 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}

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

#7 Original001

    Новичок

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

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

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

#8 FusSheva

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

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

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

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

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

#9 Original001

    Новичок

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

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

И почему кракозябы идут тоже не понятно. Хм...

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

#10 badisoft

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

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 23 March 2014 - 01:47 PM

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

Если перекодировка не нужна, а при такой строке она отсутствует, то надо просто убрать перекодировку.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#11 FusSheva

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

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

Отправлено 23 March 2014 - 03:29 PM

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

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

#12 badisoft

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

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 23 March 2014 - 03:56 PM

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

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

#13 FusSheva

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

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

Отправлено 23 March 2014 - 05:13 PM

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

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

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

#14 badisoft

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

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 23 March 2014 - 05:46 PM

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

Например, так:

.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;
}

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

#15 Original001

    Новичок

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

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

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

#16 badisoft

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

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

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

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

Не знаю, что такое "с ползунками для доп категорий", но вот: http://vsupport.club...dpost__p__30295
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#17 Original001

    Новичок

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

Отправлено 24 March 2014 - 03:37 PM

Не знаю, что такое "с ползунками для доп категорий"

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

но вот: http://vsupport.club...dpost__p__30295

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

#18 badisoft

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

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 24 March 2014 - 06:32 PM

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

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

#19 Kyborg

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

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

Отправлено 01 April 2014 - 09:08 PM

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

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

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

Как я понял, правиться это в файле 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>")<img src='http://vsupport.club/public/style_emoticons/<#EMO_DIR#>/sad.png' class='bbc_emoticon' alt=':(' />"<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.
Хороший и быстрый фильтр. Думаю было бы неплохо дополнить этот фильтр, функциями как в предыдущем, чтобы можно было выбирать вывод характеристик в виде слайдера, селекта и т.д.
  • 0

#20 badisoft

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

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 01 April 2014 - 09:47 PM

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

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

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

Да, действительно, было бы неплохо. Надеюсь, кто-нибудь это когда-нибудь сделает и выложит.

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

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