Делаем развесистый фильтр товаров (обкатка, написание, дополнения)
#241
Отправлено 04 November 2012 - 06:36 PM
А еще было бы удобно для числовых характеристик организовать фильтрацию в виде такого же наглядного слайдера как в ценовом фильтре, если это возможно конечно.
Ну и напоследок
В текущей версии модуля, характеристика отображается в блоке фильтра при условии, что ее значение прописано у ЛЮБОГО из товаров, входящих в текущую категорию. А можно ли, хотя бы в виде в виде опции, сделать, чтобы отображались только те характеристики, значения которых прописаны у ВСЕХ товаров текущей категории. Поскольку в родительскую категорию для некоторых групп товаров попадают довольно таки специфические характеристики, которые свойственны только для какой-либо из вложенных категорий.
#242
Отправлено 05 November 2012 - 11:21 AM
Наскольно я помню, Смарти позволят узнать количество элементов в массиве (что-то типа index.last, чтоли). Соответственно, никто не мешает дописать в filter.tpl.html конструкциюможно ли в фильтр внедрить условие, что если в характеристике больше определенного количества значений - отображать ее селектами, в противном случае - чекбоксы?
{if количество значений > некое число}
вывод селектом
{else}
вывод по старом, чекбоксами
{/if}
Надо только помнить, что чекбоксы позволяют выбрать несколько вариантов, а селект - один. Либо надо делать не совсем стандартный селект, чтобы выбирать в нем несколько вариантов.
Возможно все кроме запихивания зубной пасты обратно в тюбик .А еще было бы удобно для числовых характеристик организовать фильтрацию в виде такого же наглядного слайдера как в ценовом фильтре, если это возможно конечно.
Вопрос лишь в том, кто будет это "возможно" реализовывать. Для меня этот фильтр, как и модуль ЧПУ - пройденные этапы. Я уже знаю, как оба модуля сделать принципиально лучше и правильнее (ЧПУ не автоматическим, а полуавтоматическим, а фильтр - на AJAX с изменением вариантов выбора в зависимости от уже установленных галочек), поэтому "бесплатно и для всех" делать какие-то улучшения в этих модулях врядли буду. Мне это просто не интересно.
#243
Отправлено 05 November 2012 - 11:27 AM
Так так так - ану поподробнее )))фильтр - на AJAX с изменением вариантов выбора в зависимости от уже установленных галочек),
#244
Отправлено 05 November 2012 - 06:07 PM
Выпадающие чекбоксы победить пока не удалось, пробовал на основе плагина к jquery dropdown-check-list. Плагин срабатывает почему-то только для первого селекта.Наскольно я помню, Смарти позволят узнать количество элементов в массиве (что-то типа index.last, чтоли). Соответственно, никто не мешает дописать в filter.tpl.html конструкциюможно ли в фильтр внедрить условие, что если в характеристике больше определенного количества значений - отображать ее селектами, в противном случае - чекбоксы?
{if количество значений > некое число}
вывод селектом
{else}
вывод по старом, чекбоксами
{/if}
Надо только помнить, что чекбоксы позволяют выбрать несколько вариантов, а селект - один. Либо надо делать не совсем стандартный селект, чтобы выбирать в нем несколько вариантов.
Так что пока выкладываю измененый шаблон Filter3.tpl.html, в котором при количестве значений у характеристик больше 10 - они отображаются в виде селекта, если менее - чекбоксами (в шаблоне {if $params[i].variants|@count > 10} условие для типа отображения характеристики.)
<div align="left"> <form name="Filter3" method="get" action="index.php" id="Filter3"> <input type='hidden' name='categoryID' value='{$categoryID}'> <input type=hidden value='1' name='advanced_search_in_category'> {if $params} {assign var=flag value='0'} {section name=i loop=$params} {if $params[i].filter3 eq 1} {assign var=flag value='1'} {if $params[i].variants|@count > 10} <div class="pName">{$params[i].name}</div> <select name='param_{$params[i].optionID}'> <option selected value='0'>{$smarty.const.STRING_UNIMPORTANT}</option> {section name=j loop=$params[i].variants} <option value='{if $params[i].controlIsTextField eq 1}{$params[i].variants[j].value}{else}{$params[i].variants[j].variantID}{/if}'>{$params[i].variants[j].value} ({$params[i].variants[j].count})</option> {/section} </select> {else} <div class="pName">{$params[i].name}</div> <ul class="filters"> {section name=j loop=$params[i].variants} <li><label><input type="checkbox" {$params[i].variants[j].set} name='param_{$params[i].optionID}_{$smarty.section.j.index}' id='par_{$params[i].optionID}_{$params[i].variants[j].variantID}' value='{$params[i].variants[j].variantID}' onclick="document.getElementById('param_{$params[i].optionID}').checked = false;">{$params[i].variants[j].value|default:""} </label></li> {/section} </ul> {/if} {/if} {/section} {if $flag} <input type="submit" value="{$smarty.const.VIEW_BUTTON}"> {else} Нет элементов для фильтра {/if} {/if} </form> </div>
#245
Отправлено 05 November 2012 - 09:57 PM
Так а куда подробнее-то? Технология AJAX позволяет сделать запрос "невидимо" для пользователя по нажатию галочки и задизаблить те галочки, которые становятся не актуальными при этой выбранной галочке. Не перегружая каждый раз всю страницу. Т.е. сделать то самое, что всем очень хотелось в начале написания фильтра, но тогда я об AJAX еще не знал.Так так так - ану поподробнее )))
PS. Видел уже несколько фильтров именно так и сделанных. Там вообще сразу выборка товаров выводится по нажатию каждой галочки. Тормозно, конечно, получается даже на быстром интернете, но работает.
#246
Отправлено 05 November 2012 - 10:17 PM
Так а куда подробнее-то? Технология AJAX позволяет сделать запрос "невидимо" для пользователя по нажатию галочки и задизаблить те галочки, которые становятся не актуальными при этой выбранной галочке. Не перегружая каждый раз всю страницу. Т.е. сделать то самое, что всем очень хотелось в начале написания фильтра, но тогда я об AJAX еще не знал.
Тогда стоимость в студию))) плиз.поэтому "бесплатно и для всех" делать какие-то улучшения в этих модулях врядли буду. Мне это просто не интересно.
Будем заказывать
#247
Отправлено 05 November 2012 - 10:22 PM
Вот уж нафиг. Я это напишу бесплатно, т.к. мне оно самому интересно, а вот ограничивать себя чужими деньгами (как следствие - временем) не хочется. Оно не кажется особо сложным, но надо собраться с мыслями и реализовать.Тогда стоимость в студию))) плиз. Будем заказывать
#248
Отправлено 05 November 2012 - 10:28 PM
"Вас богатых не поймешь" )) то я не буду писать бесплатно, то я напишу бесплатно...... ну в общем если ты вдруг снова передумаешь ))) то пиши сразу в ЛС цену вопроса....Вот уж нафиг. Я это напишу бесплатно,
ну и на счет "ограничивать временем при платном заказе" ..... само по себе это не срочно, т.е. время выполнения можно поставить с огромным запасом или даже с двумя .....
З.Ы. меня в принципе с головой устраивает и тот вариант что сейчас есть, особенно учитывая что себе я его так и не поставил никуда, но вариант с фильтрацией "на лету" хотелось бы иметь )
#249
Отправлено 05 November 2012 - 11:36 PM
Этот модуль мне уже не интересен и, как следствие, не интересно его бесплатно дорабатывать. Как раз потому, что в голове уже есть новый вариант этого модуля, который тоже будет бесплатен. Когда "будет" - не знаю. За деньги писать не хочу, т.к. это напрягает по времени, а напрягаться не хочется, хочется в свое удовольствие. Обычно именно так получаются хорошие красивые продукты ."Вас богатых не поймешь" )) то я не буду писать бесплатно, то я напишу бесплатно.
#250
Отправлено 06 November 2012 - 07:30 PM
#251
Отправлено 06 November 2012 - 08:07 PM
У меня на этот стандартный вопрос "как такое можно сделать?" есть не менее стандартный ответ, имеющий варианты выбораесть необходимость отображать определённые характеристики на выбраных разделах. Как такое можно сделать?
1. разобраться и написать самому
2. обратиться к специалисту и заказать доработку
3. обратиться к богу. Говорят, иногда помогает .
PS. В рамках пятиминутной подсказки "сделай так-то и так-то" эта задача не решается, так что по любому придется выбирать один из трех пунктов либо отказаться от использования этого модуля.
#252
Отправлено 07 November 2012 - 11:12 AM
{if $product_extra[i].product_show eq 1 } вывод характеристик {/if}при изменении характеристики, имеющей выбор из нескольких значений для которых прописаны изменения цены - цена товара остается без изменений. На странице краткого описания такого нет.
Может кто-нибудь проверить у себя?
#254
Отправлено 10 November 2012 - 04:31 PM
Кто-то использует характеристики изменяющие цену товара? На странице подробного описание при добавлении
{if $product_extra[i].product_show eq 1 } вывод характеристик {/if}при изменении характеристики, имеющей выбор из нескольких значений для которых прописаны изменения цены - цена товара остается без изменений. На странице краткого описания такого нет.
Может кто-нибудь проверить у себя?
Покажите ваш product_detailed.tpl.html
#255
Отправлено 10 November 2012 - 09:05 PM
Скорее всего, это ошибка. Но - см. выше - я уже не буду это исправлять. Модуль открыт и бесплатен.badisoft, только на Вас надежда, проверьте на тестовом сайте пожалуйста.
#256
Отправлено 11 November 2012 - 05:35 PM
вот, будьте любезны:Покажите ваш product_detailed.tpl.html
product_detailed.tpl.html 28.38К 3 Количество загрузок:
Еще обратил внимание, что при добавлении отдельного блока с фильтром по производителю, они работают только по отдельности, т.е. отмечаешь чекбокс производителя, фильтруешь, потом если поставить чекбокс в основном блоке и отфильтровать - фильтрация по производителю сбрасывается.
#257
Отправлено 11 November 2012 - 06:25 PM
#258
Отправлено 11 November 2012 - 06:28 PM
Хотя нет. Я не неделе кому-то ставил этот фильтр и там как раз проверял на вариантах характеристики работает ли показ-непоказ характеристик в описаниях. Работало. Т.е. цена менялась в зависимости от варианта.Скорее всего, это ошибка.
Это нормально. Так и написано. Иначе как выбирать, какой выбор производителя "правильнее" - в основном блоке или в дополнительном? Да и нет основного/дополнительных, они равноправны. Где нажали кнопку "показать", там и смотрится, какие чекбоксы или селекты выбраны. "Дополнительные" блоки это просто упрощенные варианты "основного". С тем же успехом можно сделать два или три "основных" блока по разным углам сайта.Еще обратил внимание, что при добавлении отдельного блока с фильтром по производителю, они работают только по отдельности, т.е. отмечаешь чекбокс производителя, фильтруешь, потом если поставить чекбокс в основном блоке и отфильтровать - фильтрация по производителю сбрасывается.
#259
Отправлено 11 November 2012 - 08:41 PM
Вы меня видимо неправильно поняли, если взять характеристику "Производитель" и в ее настройках в админке указать отображение только во втором фильтре, то при этом при попытке отфильтровать по производителю сбрасываются все остальные фильтры (из основного блока) и наоборот.Это нормально. Так и написано. Иначе как выбирать, какой выбор производителя "правильнее" - в основном блоке или в дополнительном? Да и нет основного/дополнительных, они равноправны. Где нажали кнопку "показать", там и смотрится, какие чекбоксы или селекты выбраны. "Дополнительные" блоки это просто упрощенные варианты "основного". С тем же успехом можно сделать два или три "основных" блока по разным углам сайта.
gsm-group, ссылку в лс отправил
Кажется я понял в чем тут ошибка.product_detailed.tpl.html без ошибок ( в рамках этого модуля ). Просмотрев файл и его содержимое, ВСЕ что отвечает за изменение цены на месте и работоспособно. Для уверенности залил ваш файл к себе на сайт в место своего. Все работает. Ошибка в другом месте. Желательно посмотреть на Ваш сайт (можно в личку).
У вас все работает потому что в настройках характеристик нет таких, которые скрыты от отображения. А если часть из них скрыть, то нижеуказанный стандартный скрипт в шаблоне product_detailed.tpl.html работает неправильно:
<script type="text/javascript"> function GetCurrentCurrency() { {/literal} _selectionCount={$select_counter_var}; _sum = {$product_info.PriceWithOutUnit}; {counter name='select_counter2' start=1 skip=1 print=false assign='select_counter_var2'} {section name=i loop=$product_extra} {section name=k loop=$product_extra[i].option_show_times} _value = document.MainForm.option_select_{$select_counter_var2}.value; price_surplus = ( _value.split(":") )[0]; _sum += new Number( price_surplus ); variantID = ( _value.split(":") )[1]; document.HiddenFieldsForm.option_select_hidden_{$select_counter_var2}.value = variantID; {counter name=select_counter2} {/section} {/section} _sum = Math.round(_sum*100)/100; _sumStr = new String(_sum); _commaIndex = _sumStr.indexOf("."); if ( _commaIndex == -1 ) _sumStr = _sum; else _sumStr = _sumStr.substr(0, _commaIndex + 3); {php} echo("locationPriceUnit=".getLocationPriceUnit().";\n"); echo("priceUnit='".getPriceUnit()."';\n"); {/php} _sumStr = _formatPrice( _sumStr, {$currency_roundval}); if ( locationPriceUnit ) document.getElementById('optionPrice').innerHTML = _sumStr + document.MainForm.priceUnit.value; else document.getElementById('optionPrice').innerHTML = document.MainForm.priceUnit.value + _sumStr; {literal} } {/literal} GetCurrentCurrency(); </script>
Но для его исправления, к сожалению, моих познаний недостаточно.
#260
Отправлено 11 November 2012 - 08:42 PM
Я Вас совершенно правильно понял и могу только повторить "Это нормально. Так и написано". Фильтры равнозначны и выделяя галочкой конкретного производителя (и более ничего, т.к. в этом фильтре больше никаких характеристик нет) Вы выбираете фильтрацию по производителю и не более того. Не фильтрацию "все что в фильтре 1 плюс фильтр 2 плюс фильтр 3", а только лишь по производителю. Три разных по верстке блока фильтра это лишь дополнительная возможность получить несколько разных и удобных в разных случаях вариантов фильтра, но они никак не суммируются и не пересекаются.Вы меня видимо неправильно поняли
Другими словами (возможно, так будет понятнее) каждый из этих блоков выдает исполняемому модулю задание "отфильтруй-ка мне вот это". Выдает совершенно одинаково и никак не учитывая галочки, установленные или не установленные в других блоках фильтра. Можно их тоже учитывать, навскидку это не кажется особенно сложным, но я себе такой задачи не ставил и "фильтр-2" "фильтр-3" сделаны, скорее, как неожиданно удачные довески к основному TPL.HTML, упрощенные варианты "основного" фильтра в другом дизайне.