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


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


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

#61 badisoft

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

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

Отправлено 18 February 2015 - 02:11 AM

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

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

#62 badisoft

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

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

Отправлено 21 February 2015 - 09:58 AM

Являюсь счастливым обладателем модуля ЧПУ от Трикивеба. При использовании дефолтного filter.php в выдаче отфильтрованных товаров правильные ссылки на товары вида: сайт.ру/тапки/модные_тапки_123.html заменяются на ссылки вида сайт.ру/category_35/модные_тапки_123.html

Надо в filter.php сделать следующую замену:

# $data = db_query("SELECT categoryID, parent FROM ".CATEGORIES_TABLE);
# while ($row = db_fetch_assoc($data)) $fc[] = $row;
$data = db_query("SELECT categoryID, parent, uri FROM ".CATEGORIES_TABLE);
while ($row = db_fetch_assoc($data)) $fc[$row['categoryID']] = $row;

Остальные закомментированые изменения не нужны, они относятся к другой версии этого ЧПУ.

Более новая версия (только измененные файлы) фильтра.
1. Добавлена фильтрация в результатах работы обычного поиска.
2. Добавлены настройки начального состояния (включен автопоказ или нет, развернут и свернут фильтр, развернуты или свернуты списки вариантов, показывать ли кнопку "Развернуть/Свернуть").
3. Добавлено изменение цвета кнопки "Показать" если хоть одна галка в фильтре выбрана.
4. Наверное, что-то еще, но уже не помню :).

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

  • Прикрепленный файл  filter.php   10.4К   37 Количество загрузок:
  • Прикрепленный файл  filter.tpl.html   3.22К   33 Количество загрузок:
  • Прикрепленный файл  filter_new.tpl.html   6.76К   35 Количество загрузок:

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

#63 Den

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

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

Отправлено 27 February 2015 - 02:21 PM

1. Добавлена фильтрация в результатах работы обычного поиска.

тут та же проблема с ЧПУ, что была при фильтрации внутри категории.
  • 0

#64 badisoft

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

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

Отправлено 27 February 2015 - 04:36 PM

тут та же проблема с ЧПУ, что была при фильтрации внутри категории.

А без фильтра в результатах работы обычного поиска нет проблемы? :)

PS (Позже, подумавши) Не верю. Не должно быть в данном случае разницы между категорией и поиском. "Фильтрация в результатах поиска" это всего навсего добавление в SQL-запрос в условие WHERE кроме "галочно-фильтровых" условий еще и условия (дополнительное ограничение выборки) из строки поиска.

Для используемого вами модуля ЧПУ исходная неработоспособность фильтра заключалась в отсутствии в SQL-запросе поля uri, где содержался ЧПУ, заменяющий штатную ссылку. Если Вы в этой новой версии добавили поле uri в запрос (я в личке описывал, что на что заменить), то должно работать везде. Если нет, то не должно работать нигде. Но точно не "в категориях работает, а в поиске нет". Мне умозрительно видится так.

Я выкладываю как исходные модули, так и обновления применительно к штатной инсталляции ShopCMS, где никаким ЧПУ и не пахнет. Поэтому проблемы с ЧПУ считаю коммерческими с соответствующим отношением.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#65 Den

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

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

Отправлено 28 February 2015 - 02:19 PM

Если Вы в этой новой версии добавили поле uri в запрос (я в личке описывал, что на что заменить), то должно работать везде. Если нет, то не должно работать нигде. Но точно не "в категориях работает, а в поиске нет". Мне умозрительно видится так.
.....
Я выкладываю как исходные модули, так и обновления применительно к штатной инсталляции ShopCMS, где никаким ЧПУ и не пахнет. Поэтому проблемы с ЧПУ считаю коммерческими с соответствующим отношением.

Без фильтрации в результатах поиска проблемы с ЧПУ нет. Но как только меняешь что-то в фильтре - в выдаче в ссылке на товар вместо наименования категории - просто "/category_#категории/". То есть также как было до внесения исправлений в фильтрации внутри категории.

Но никаких претензий по работе фильтра к Вам не имею, просто, так сказать, довожу до Вашего сведения :)
  • 0

#66 badisoft

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

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

Отправлено 28 February 2015 - 04:50 PM

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

#67 Den

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

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

Отправлено 02 March 2015 - 10:27 AM

Если Вы мне снова дадите доступ к сайту, где есть этот ЧПУ, то я посмотрю, в чем там проблема. Обещать не обещаю, но если будет свободная минутка, то почему бы нет? У себя посмотреть не могу, т.к. не пользуюсь этим ЧПУ.

Для себя понял, что в результатах поиска фильтр не совсем удобен, поскольку туда подтягивается микс характеристик из разных категорий и только лишний раз может запутать клиента. Поэтому не хочу злоупотреблять Вашей добродетелью :)
Есть немного другой вопрос, может подскажите. Хочу добавить некий текст, чтобы он появлялся над результатами выдачи фильтра, попытался по аналогии с categoryName, дописать в filter.php:
$smarty->assign( "selected_category.description","Тут текст описания категории после фильтра");
Но не сработало :D
  • 0

#68 badisoft

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

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

Отправлено 02 March 2015 - 01:00 PM

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

Тут smarty-синтаксис типа "массив.элемент" не прокатит, это же еще не smarty-шаблон :).
$smarty->assign( "selected_category",array('description' => "Тут текст описания категории после фильтра"));

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

#69 Den

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

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

Отправлено 02 March 2015 - 03:54 PM

badisoft, спасибо за помощь, получилось!
Однако, туда много не вместишь, поэтому сделал для выдачи отдельный файл шаблона category_filter.tpl.html
И последний вопрос (надеюсь :)). Задался целью перенести из блока с фильтром селекты "Сортировка" и "К-во товаров на странице". Из шаблона блока в шаблон категории перенес, селекты появились, но естественно не работают. Трудоемко ли их заставить работать? Или проще через position:absolute в CSS перенести?
  • 0

#70 badisoft

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

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

Отправлено 02 March 2015 - 04:20 PM

Однако, туда много не вместишь, поэтому сделал для выдачи отдельный файл шаблона category_filter.tpl.html

Удобнее всего так:
$smarty->assign( "selected_category",array('description' => $smarty->fetch(filter_description.tpl.html)));
Где в filter_description.tpl.html будет шаблон описания (только описания!) хоть на чистом HTML, хоть на Smarty.

Задался целью перенести из блока с фильтром селекты "Сортировка" и "К-во товаров на странице". Из шаблона блока в шаблон категории перенес, селекты появились, но естественно не работают. Трудоемко ли их заставить работать?

А что значит "заставить работать"? :)
Что должны делать селекты от фильтра в шаблоне категории?
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#71 Den

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

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

Отправлено 02 March 2015 - 04:48 PM

А что значит "заставить работать"? :)
Что должны делать селекты от фильтра в шаблоне категории?

Ну ведь порядок сортировки изначально идет в шаблоне категории (category.tpl.html), плюс его логичнее отображать именно над выводом товаров, а не в блоке фильтра. Да и сам блок разгрузится от лишних опций. Сплошные плюсы :)
  • 0

#72 badisoft

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

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

Отправлено 02 March 2015 - 05:21 PM

Ну ведь порядок сортировки изначально идет в шаблоне категории

Что означает "изначально"?
Изначально в категории есть своя сортировка, а в фильтре своя (с бОльшим количеством вариантов) и каждая из них относится к своему результату. В категории к списку товаров категории, а в фильтре к результату работы фильтра. В категории тип и порядок сортировки задается путем добавления GET-переменных к запросу и вызывается по ссылке, а в фильтре это POST-переменные, задаваемые сабмитом формы.

Возможно, Вас как-то путает, что для вывода результатов работы фильтра используются штатные шаблоны категории и краткого описания. Так они используются как шаблоны ВЫВОДА РЕЗУЛЬТАТА, не более того. Сама выборка делается абсолютно по разному и разным кодом.

Я с ходу даже придумать не могу, как эти две сортировки объединить для фильтра и категории. Да и зачем? А если фильтр нужен будет не только в категории а и, скажем, на главной странице? Или на любой другой странице, где нет штатных для категории выборов сортировки?

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

#73 Den

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

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

Отправлено 02 March 2015 - 07:37 PM

Изначально в категории есть своя сортировка, а в фильтре своя (с бОльшим количеством вариантов) и каждая из них относится к своему результату

Безусловно!

Возможно, Вас как-то путает, что для вывода результатов работы фильтра используются штатные шаблоны категории и краткого описания. Так они используются как шаблоны ВЫВОДА РЕЗУЛЬТАТА, не более того. Сама выборка делается абсолютно по разному и разным кодом

Меня не путает, да и было бы странно отфильтрованные результаты выводить, используя другой шаблон. Ведь для посетителя это те же товары какой-либо категории, минус отсеянные по каким-то признакам. И соответственно элементы навигации по ним должны быть идентичны.

Я с ходу даже придумать не могу, как эти две сортировки объединить для фильтра и категории. Да и зачем?

И в этом нет необходимости. Я всего лишь говорил о возможности переноса их из шаблона фильтра в шаблон отвечающий за вывод отфильтрованных товаров. До работы фильтра отображается дефолтная сортировка, а после применения фильтра на том же месте появляется Ваша сортировка. В результате блок фильтра можно разгрузить от следующих элементов:
- кнопка "Сбросить фильтр" - делаем отображение только при возможности сброса (меняем style="color:grey" на style="display:none")
- делаем галку "Автопоказ" включенной по-умолчанию и убираем ее отображение вместе с кнопкой "Показать" (через тот же display:none)
- переносим селекты "Сортировка" и "На странице" в шаблон над выводом товаров вместо $string_product_sort (как это сделать вот в чем вопрос)
Считаю с точки зрения юзабилити такой вариант предпочтительней.
  • 0

#74 badisoft

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

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

Отправлено 02 March 2015 - 07:45 PM

Я всего лишь говорил о возможности переноса их из шаблона фильтра в шаблон отвечающий за вывод отфильтрованных товаров. До работы фильтра отображается дефолтная сортировка, а после применения фильтра на том же месте появляется Ваша сортировка

Мысль интересная, разумная и на первый взгляд вполне решаемая, хотя я уже вижу подводные камни. Я подумаю над решением.

Считаю с точки зрения юзабилити такой вариант предпочтительней.

Ну, Вы ведь знаете мой стандартный ответ на такие сентенции? :)
Считаешь - сделай. Не можешь, но надо - оплати.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#75 badisoft

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

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

Отправлено 03 March 2015 - 04:33 PM

Я подумаю над решением.

filter.php:

# BEGIN переносим сортер в результат фильтра
$smarty->assign( "filtersort",$filtersort);
$smarty->assign( "prdPerPage",$prdPerPage);
$smarty->assign( "string_product_sort",$smarty->fetch('filter_sorter.tpl.html'));
# END переносим сортер в результат фильтра

echo iconv('CP1251','UTF-8',$smarty->fetch("category.tpl.html"));

filter_new.tpl.html

{* BEGIN переносим сортер в результат фильтра *}
{*
<select name="sort">
<option value="{$smarty.const.CONF_DEFAULT_SORT_ORDER}">Сортировка</option>
<option value="Price,name">Цена (возр)</option>
<option value="Price DESC,name">Цена (убыв)</option>
<option value="name,Price">Название</option>
<option value="customers_rating DESC,name,Price">Рейтинг</option>
</select>

<div class="fil"></div>

<select name="prdPerPage">
<option value="{$smarty.const.CONF_PRODUCTS_PER_PAGE}"{if $prdPerPage == $smarty.const.CONF_PRODUCTS_PER_PAGE} selected{/if}>На странице</option>
<option value="10"{if $prdPerPage == 10} selected{/if}>10 товаров</option>
<option value="20"{if $prdPerPage == 20} selected{/if}>20 товаров</option>
<option value="50"{if $prdPerPage == 50} selected{/if}>50 товаров</option>
<option value="100"{if $prdPerPage == 100} selected{/if}>100 товаров</option>
</select>

<div class="fil"></div>
*}
<input type="hidden" name="sort" id="sort" value="{$smarty.const.CONF_DEFAULT_SORT_ORDER}">
<input type="hidden" name="prdPerPage" id="prdPerPage" value="{$smarty.const.CONF_PRODUCTS_PER_PAGE}">
<script type="text/javascript">
{literal}
function sortSubmit(select) {
document.getElementById('sort').value = select.value;
filterSubmit();
}
function perpageSubmit(select) {
document.getElementById('prdPerPage').value = select.value;
filterSubmit();
}
{/literal}
</script>
{* END переносим сортер в результат фильтра *}

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


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

#76 Den

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

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

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

Огромное спасибо, сейчас протестим!

UPD: все работает как надо :)

Кто может у себя проверить это:

Чтобы неактивные (недоступные для отметки) варианты характеристик фильтра не затемнялись, а вообще пропадали, тем самым не будет ненужных неактивных зон.

Ну, это-то и совсем легко. Например, вместо disable в чекбоксы вписать style="display:none". Но я не уверен, что это полезно - убирать из видимости возможные (при другом наборе галок) варианты.

Попробовал так сделать у себя: чекбоксы и их описание исчезли, но сам блок с опциями меньше не стал. То ли у меня что-то со стилями, то ли так задумано.

ИзображениеИзображение

UPD:
нашел в чем дело, там после каждого <label></label> идет <br>, поэтому пустые строки отображаются.
  • 0

#77 stasikons

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

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

Отправлено 14 March 2015 - 09:07 PM

делаем галку "Автопоказ" включенной по-умолчанию и убираем ее отображение вместе с кнопкой "Показать" (через тот же display:none)

А как на практике это реализовать?
  • 0

#78 Den

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

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

Отправлено 16 March 2015 - 12:06 PM

А как на практике это реализовать?

в файле filter_new.tpl.html строка
define('FILTERAUTO'  ,true); // изначально галка "Автопоказ" установлена
и
<label><input type="checkbox" name="filterauto" id="filterauto" value="1"{if $smarty.const.FILTERAUTO} checked{/if}>&nbsp;<b>Автопоказ</b></label>
меняем на:
<label style="display:none"><input style="display:none" type="checkbox" name="filterauto" id="filterauto" value="1"{if $smarty.const.FILTERAUTO} checked{/if}>&nbsp;<b>Автопоказ</b></label>

  • 0

#79 Den

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

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

Отправлено 16 March 2015 - 05:33 PM

Подскажите куда копать. Обнаружил, что в IE11 блок с аякс-фильтром а также вывод товаров после фильтрации отображается с неверной кодировкой. В остальных браузерах все ОК.
В файле filter.php перекодировка отключена:
echo $smarty->fetch("filter.tpl.html");
echo $smarty->fetch("category.tpl.html");
При этом, если ее включить обратно, то проблема в IE11 исчезает, но соответственно появляется во всех других браузерах.
Более того, IE7 и IE8 вообще отказываются отображать опции фильтра. Отображаются только "Свернуть/Развернуть", "Сбросить" и т.д. до селектов сортировки, а ниже ничего из опций характеристик нет, в т.ч. ползунков цены...
  • 0

#80 badisoft

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

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

Отправлено 16 March 2015 - 06:00 PM

В файле filter.php перекодировка отключена:

Тут, скорее, надо разбираться в том, почему оно работает при отключенной перекодировке.
Результат аякс-запроса должен возвращаться в UTF8. Именно поэтому там и вставлена перекодировка результата обработки смарти-шаблонов, ведь он (результат) в кодировке cp1251.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)