Форум русской поддержки Joomla!® CMS
04.12.2016, 22:27:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1] 2  Все   Вниз
  Добавить закладку  |  Печать  
Автор

Модификация фильтра товаров JoomShopping

 (Прочитано 2341 раз)
0 Пользователей и 1 Гость смотрят эту тему.
shurakana
Живу я здесь
******

Репутация: +48/-6
Offline Offline

Сообщений: 859



« : 22.08.2014, 00:16:44 »

Всем привет! после прочтения темы http://joomlaforum.ru/index.php/topic,214548.0.html пришла идея (вернее я посмел подумать) модернизировать стандартный фильтр товаров JoomShopping. Чтобы при выборе опции показывалось количество товаров и т.д. что смогу.. Grin

И так, js который собирает данные из фильтра:
Показать текстовый блок

и функция adder в \components\com_jshopping\controllers\cart.php
Показать текстовый блок

И характеристикииз \modules\mod_jshopping_filters\tmpl\default.php
Показать текстовый блок

Но возникла проблема, фильтр не всегда фильтрует как надо, то есть если я выберу все опции выше, то мне все равно покажется товар. Хотя последняя характеристика не принадлежит ни одному товару. Но, если возьмем следующую характеристику, и там выберем пустую опцию, то тогда нам фильтр ничего не покажет.
Т.е разница в запросе OR и AND в MySQL. В рамках одной характеристики используется запрос с OR, а между характеристиками с AND.

Добавил в создание характеристики опцию, 1 или 0, планировалось для изменения запроса или OR или AND.
В default.php я смог вывести этот параметр для формирования AJAX запроса в adder.php.

А вот в системе, в \components\com_jshopping\lib\jtableauto.php, строка 60 примерно, не могу создать условие OR или AND для характеристики.
Это позволит получить более понятные и логичные условия поиска. Помогайте.
В #_jshopping_products_extra_fields поле называется plus_minus.
Показать текстовый блок

Буду рад любой помощи.. и не помощи..))
Надеюсь, тут есть люди поумнее меня у которых еще нет ajax фильтра..)))

« Последнее редактирование: 22.08.2014, 13:12:37 от shurakana » Записан
shurakana
Живу я здесь
******

Репутация: +48/-6
Offline Offline

Сообщений: 859



« Ответ #1 : 22.08.2014, 17:24:23 »

Не получилось сделать как надо, в итоге сделал условие по старинке, с запросом в БД...)
Показать текстовый блок

Теперь фильтр поумнел и выводит результаты с условиями.
Пример опций: покажи мне белую и красную краску металлик, но только для дерева.
Показать текстовый блок

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

У кого есть идею по дальнейшему запилу, делимся..
Записан
shurakana
Живу я здесь
******

Репутация: +48/-6
Offline Offline

Сообщений: 859



« Ответ #2 : 23.08.2014, 03:44:22 »

Долго разбирался почему странно считается количество если в запросе есть AND и OR.
Но сделал правильный подсчет количества в соответствии с выбранными опциями. Правда для этого пришлось перенести скрипт в тело, не люблю делать так.
Показать текстовый блок
Для правильного подсчета запрос должен выглядеть примерно так:
Код:
SELECT COUNT(*) FROM teyzk_jshopping_products
WHERE ( prod_category='2' AND product_publish='1')
AND ( extra_field_3='6' OR extra_field_3='8' )
AND ( extra_field_4='10' OR extra_field_4='11' )
AND ( extra_field_5='12' AND extra_field_5='13' )

Также сделал чтобы при загрузке фильтра неактивные опции скрывались или disable'лись, кому как нравится. Но, мне кажется должен быть способ проще, без запроса.
А то многовато запросов получается.
Код:
<input  <?php $query="SELECT extra_field_$ch_id FROM #_jshopping_products WHERE prod_category='$category_id' AND extra_field_$ch_id='$val_id'"; $db->setQuery($query); $disable=$db->loadResult(); if ($disable == ""){echo 'disabled';} ?> />

Скажите, как получить данные только с НЕ отмеченных чекбоксов, для того чтобы затемнять опции которые не имеют значения при дальнейшем выборе? Или может есть другие варианты...?
Записан
shurakana
Живу я здесь
******

Репутация: +48/-6
Offline Offline

Сообщений: 859



« Ответ #3 : 27.08.2014, 14:44:48 »

Данные с не отмеченных чекбоксов, я все таки смог получить.
Т.е. задаем класс всем чекбоксам и у отмеченых удаляем. Т.е чекбокс с классом ex_fields это не отмеченный чекбокс.
Код:
$('input[type="checkbox"]').addClass('ex_fields');
$('input[type="checkbox"]:checked').removeClass('ex_fields');
Показать текстовый блок
А далее просто переключаем класс по клику и вызываем фунцкию AJAX после смены класса:
Код:
$('input[type="checkbox"]').click(function () {
$(this).toggleClass('ex_fields');
bistro();
});

Ну, что вышло на текущий момент глянуть можно здесь: http://shurakana.myjino.ru/shop/radar-detectory
Записан
shurakana
Живу я здесь
******

Репутация: +48/-6
Offline Offline

Сообщений: 859



« Ответ #4 : 30.08.2014, 16:20:54 »

Прикрутил jqueryUI ползунок для цены, кстати обошелся малой кровью (в отличии от некоторых) сам jqueryUI 6.9 KB и CSS 500 байт в gzip.
Добавил 2 inputa (там он 1 по умолчанию).
Сделал чтобы до выбора опций input'ы были пустые и показывались средние позиции. (для интересности)

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

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

Ну все, осталось сделать чтобы затемнялись не имеющие дальнейшее значение опции.. dry

смотреть тут же..http://shurakana.myjino.ru/shop/radar-detectory
Записан
nevigen
Moderator
*****

Репутация: +734/-16
Online Online

Пол: Мужской
Сообщений: 8803


http://n*****n.com


« Ответ #5 : 30.08.2014, 19:13:57 »

в Chrome не получилось сдвинуть ни одного ограничителя цены.
Записан
shurakana
Живу я здесь
******

Репутация: +48/-6
Offline Offline

Сообщений: 859



« Ответ #6 : 30.08.2014, 19:34:07 »

Чудеса (возможно маркетинга).. т.к. даже в андроиде в стандартном браузере двигается. Да что уж там, в ie 6 даже работает..
Где то видел уже у вас подобное сообщение.. Но шутить, типа попробуйте переустановить, не буду..))
Может кэш? на старом компе проверил, там еще вообще старый стиль закешировался...
« Последнее редактирование: 30.08.2014, 19:37:08 от shurakana » Записан
nevigen
Moderator
*****

Репутация: +734/-16
Online Online

Пол: Мужской
Сообщений: 8803


http://n*****n.com


« Ответ #7 : 30.08.2014, 19:59:19 »

почищено кеш.
https://yadi.sk/d/lmCKvaXmahVEj

ну я ж не корысти ради...
в ФФ норм.
Записан
shurakana
Живу я здесь
******

Репутация: +48/-6
Offline Offline

Сообщений: 859



« Ответ #8 : 30.08.2014, 20:24:01 »

Ладно че, чудеса бывают как я и говорил... Есть предположения почему так? z-index:10000 сделал...)
события hover на курсорах срабатывают? Ошибки в консоли мож есть?
Записан
nevigen
Moderator
*****

Репутация: +734/-16
Online Online

Пол: Мужской
Сообщений: 8803


http://n*****n.com


« Ответ #9 : 30.08.2014, 22:11:32 »

http://prntscr.com/4i1buu
Записан
ELLE
Support Team
*****

Репутация: +862/-0
Offline Offline

Пол: Женский
Сообщений: 4723



« Ответ #10 : 30.08.2014, 22:44:23 »

А у меня нормально в Chrome, и даже ошибок нет. Или уже поправили?
Записан
nevigen
Moderator
*****

Репутация: +734/-16
Online Online

Пол: Мужской
Сообщений: 8803


http://n*****n.com


« Ответ #11 : 30.08.2014, 23:17:36 »

подозреваю я особенный...
ибо у меня даже переключатели вида не работают Sad

может настройки хрома конечно.
но я не специально.... Azn
Версия 37.0.2062.102 m
Записан
ELLE
Support Team
*****

Репутация: +862/-0
Offline Offline

Пол: Женский
Сообщений: 4723



« Ответ #12 : 30.08.2014, 23:25:49 »

может какой плагин к хрому блочит. например, какой-то из плагинов типа adblock раньше знаю не любил %myjino%
Записан
nevigen
Moderator
*****

Репутация: +734/-16
Online Online

Пол: Мужской
Сообщений: 8803


http://n*****n.com


« Ответ #13 : 30.08.2014, 23:29:33 »

та нет нет ничего такого.
лана еси работает в Chrome, а только у меня нет.
беру слова обратно, проблема локальна.
такое быват...
несколько раз пришлось решать проблемы которых нет.
но клиент настойчив говорил что есть.
Записан
shurakana
Живу я здесь
******

Репутация: +48/-6
Offline Offline

Сообщений: 859



« Ответ #14 : 31.08.2014, 07:48:25 »

А у меня нормально в Chrome, и даже ошибок нет. Или уже поправили?
Нет, не правил.

nevigen, если переключаели не работают, то вообще странно, там обычные блоки.
Мож тестили че нить и просто javascript там отключили?
Тупанул, вызов функции то идет..
« Последнее редактирование: 31.08.2014, 08:22:48 от shurakana » Записан
nevigen
Moderator
*****

Репутация: +734/-16
Online Online

Пол: Мужской
Сообщений: 8803


http://n*****n.com


« Ответ #15 : 31.08.2014, 10:28:04 »

скрипты открыты на выполнение.
честно... ХЗ

не парьтесь Wink
1 сигнал еще не проблема...
если будут другие, тогда вопрос.
Записан
shurakana
Живу я здесь
******

Репутация: +48/-6
Offline Offline

Сообщений: 859



« Ответ #16 : 31.08.2014, 11:24:53 »

Да не, я то с 3 ноутов, iphona(подфартило), андроида и виндофона проверил..)))

Вообще, когда делаешь что-то, проверяешь в ff и Google, а остальные так, после готовности уже..

И вот такое же будет, печаль беда тогда, всю голову сломаешь..))
Поэтому интересно что такое...
Записан
shurakana
Живу я здесь
******

Репутация: +48/-6
Offline Offline

Сообщений: 859



« Ответ #17 : 31.08.2014, 12:35:12 »

Подскажите как сделать чтобы затемнялись опции которые не имеют значения при дальнейшем выборе?
т.е. после получения значений, я в цикле прохожу по всем неактивным опциям с запросом в БД и проверяю, нужны они или нет.

А если нет, что делать, как передать значение?
Пока первое что пришло в голову отдать так:
Код:
<style>
   //начало цикла
      .ex_field[value=13] + label {color:ccc;}
   //конец цикла
</style>

Но, это не дело ведь..))

UPD Блин, с выводом решил. Я теперь не понял как запросы делать для затемнения, запутался..
« Последнее редактирование: 31.08.2014, 14:05:14 от shurakana » Записан
nevigen
Moderator
*****

Репутация: +734/-16
Online Online

Пол: Мужской
Сообщений: 8803


http://n*****n.com


« Ответ #18 : 31.08.2014, 20:05:24 »

кверя, назначайте/добавляйте класс, а класс прописать в CSS Azn
Записан
shurakana
Живу я здесь
******

Репутация: +48/-6
Offline Offline

Сообщений: 859



« Ответ #19 : 01.09.2014, 04:42:33 »

кверя, назначайте/добавляйте класс, а класс прописать в CSS Azn

Да, сказать легко.. В процессе узнал зачем нужны многомерные массивы, json и много чего прочего, и все ради затемнения input..  Grin

Записан
shurakana
Живу я здесь
******

Репутация: +48/-6
Offline Offline

Сообщений: 859



« Ответ #20 : 01.09.2014, 22:34:09 »

Все, работает..!

Один момент только остался, надо сделать чтобы параметры из блоков И при выборе не гасли.
Я использую тот же запрос, что и при подсчете, просто подставляю по очереди в конец значения всех чекбоксов с оператором AND.
А ведь еще надо чтобы затемнения переносились на след страницу...((

Доделаешь одно, еще два появляется..))

Nevigen, хотел посмотреть как ваш работает, но, чето он не совсем AJAX стал - http://demex.nevigen.com/ru/joomshopping/cars.html
« Последнее редактирование: 01.09.2014, 23:05:00 от shurakana » Записан
shurakana
Живу я здесь
******

Репутация: +48/-6
Offline Offline

Сообщений: 859



« Ответ #21 : 02.09.2014, 14:55:22 »

Никак не могу сообразить какой запрос делать чтобы с условием И работало затемнение блоков. Если просто OR добавить то при уменьшении цены товар остается, а если с AND то в блоке И гаснут товары.

Подскажите, у меня голова опухла думать уже. Блин, считает ведь правильно учитывая блоки И и ТОЛЬКО... Может как то результата отталкиваться..?

Подсчет ведется таким запросом
Код:
SELECT COUNT(*) FROM teyzk_jshopping_products WHERE product_price BETWEEN 0.000000 AND 3600.000000 AND ( prod_category='2' AND product_publish='1') AND ( extra_field_3='6' OR extra_field_3='8')
Где в скобках OR значит блок И. А затемнение с этим же запросом, в цикле прохожусь всеми характеристиками добавляя в конец OR extra_filed_% или AND extra_filed_%.

 Sad
« Последнее редактирование: 04.09.2014, 22:20:29 от shurakana » Записан
shurakana
Живу я здесь
******

Репутация: +48/-6
Offline Offline

Сообщений: 859



« Ответ #22 : 04.09.2014, 22:20:11 »

Помогайте... застрял..(
Записан
shurakana
Живу я здесь
******

Репутация: +48/-6
Offline Offline

Сообщений: 859



« Ответ #23 : 05.09.2014, 02:02:56 »

Ну подскажите куда копать? Мож че подучить чего надо, у меня живот болит уже когда в уме пытаюсь просчитать запрос.
Я его просто составить то не могу, не то чтобы в коде написать...

Я уже 5 дней убил только на то чтобы продумать запрос, сил уже нет..

Пожалейте..   Cry

Записан
robert
Профи
********

Репутация: +343/-11
Offline Offline

Пол: Мужской
Сообщений: 3572


« Ответ #24 : 05.09.2014, 10:53:42 »

Не вникал в сущность темы, смотрел только запрос. Что с ним не так? Только конкретно, на пальцах, без обобщенных слов.
Записан
shurakana
Живу я здесь
******

Репутация: +48/-6
Offline Offline

Сообщений: 859



« Ответ #25 : 05.09.2014, 17:07:49 »

Не вникал в сущность темы, смотрел только запрос. Что с ним не так? Только конкретно, на пальцах, без обобщенных слов.
Ок, надо заделать запрос (или еще что то) чтобы при фильтрации не происходило затемнение характеристик с логикой И.
http://shurakana.myjino.ru/shop/radar-detectory - другими словами чтобы при выборе белой, не затемнялась красная. и т.д.

При необходимости могу ссылку на файлы дать.
Записан
robert
Профи
********

Репутация: +343/-11
Offline Offline

Пол: Мужской
Сообщений: 3572


« Ответ #26 : 06.09.2014, 13:56:55 »

А что возвращает http://shurakana.myjino.ru/shop/cart/adder в data.dlyavsex['count']?
Записан
shurakana
Живу я здесь
******

Репутация: +48/-6
Offline Offline

Сообщений: 859



« Ответ #27 : 06.09.2014, 14:16:04 »

А что возвращает http://shurakana.myjino.ru/shop/cart/adder в data.dlyavsex['count']?
Сейчас вроде уже ничего, а вообще, там количество элементов в массиве, для цикла while где происходит добавление disabled аттрибутов.
Записан
robert
Профи
********

Репутация: +343/-11
Offline Offline

Пол: Мужской
Сообщений: 3572


« Ответ #28 : 06.09.2014, 21:38:37 »

Код
if(data.dlyavsex['count'] >= 0);{
for (var i=0; i <= data.dlyavsex['count']-1; i++){
$('input[value='+data.dlyavsex[i]+']').addClass('ex_fiel');
}
}
 
Так это он затемняет "красную", присвоив input класс ex_fiel. Пока не вижу связь между запросом и затемнением input.
Записан
shurakana
Живу я здесь
******

Репутация: +48/-6
Offline Offline

Сообщений: 859



« Ответ #29 : 07.09.2014, 00:28:50 »

Ах да, прошу прощения, я бекапил много, и думал что эта версия с дисаблед, а эта просто затемняет..))

data.dlyavsex['count'] возвращает количетво элементов, у которых ответ 0, т.е. все значения проверяю в цикле, и если ответ 0 заношу в переменную, название и значение, потом подсчитываю в php.
$jsoner['dlyavsex']['count'] = count($massiv_gde_nol);

В этом же цикле записываются value чекбосов у которых ответ 0 сюда - data.dlyavsex[]
вот так. В массиве $massiv_dlyavsex все значения чекбоксов и value вот так - extra_field_3=6 и т.д..

Показать текстовый блок

Простите за такие переменные, я просто забываю что к чему если их называть не так явно..((
Записан
Страниц: [1] 2  Все   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet