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


Делаем развесистый фильтр товаров (обкатка, написание, дополнения)


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

#241 Den

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

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

Отправлено 04 November 2012 - 06:36 PM

badisoft, можно ли в фильтр внедрить условие, что если в характеристике больше определенного количества значений - отображать ее селектами, в противном случае - чекбоксы?
А еще было бы удобно для числовых характеристик организовать фильтрацию в виде такого же наглядного слайдера как в ценовом фильтре, если это возможно конечно.
Ну и напоследок :)
В текущей версии модуля, характеристика отображается в блоке фильтра при условии, что ее значение прописано у ЛЮБОГО из товаров, входящих в текущую категорию. А можно ли, хотя бы в виде в виде опции, сделать, чтобы отображались только те характеристики, значения которых прописаны у ВСЕХ товаров текущей категории. Поскольку в родительскую категорию для некоторых групп товаров попадают довольно таки специфические характеристики, которые свойственны только для какой-либо из вложенных категорий.
  • 0

#242 badisoft

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

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

Отправлено 05 November 2012 - 11:21 AM

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

Наскольно я помню, Смарти позволят узнать количество элементов в массиве (что-то типа index.last, чтоли). Соответственно, никто не мешает дописать в filter.tpl.html конструкцию

{if количество значений > некое число}
вывод селектом
{else}
вывод по старом, чекбоксами
{/if}

Надо только помнить, что чекбоксы позволяют выбрать несколько вариантов, а селект - один. Либо надо делать не совсем стандартный селект, чтобы выбирать в нем несколько вариантов.

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

Возможно все кроме запихивания зубной пасты обратно в тюбик :).

Вопрос лишь в том, кто будет это "возможно" реализовывать. Для меня этот фильтр, как и модуль ЧПУ - пройденные этапы. Я уже знаю, как оба модуля сделать принципиально лучше и правильнее (ЧПУ не автоматическим, а полуавтоматическим, а фильтр - на AJAX с изменением вариантов выбора в зависимости от уже установленных галочек), поэтому "бесплатно и для всех" делать какие-то улучшения в этих модулях врядли буду. Мне это просто не интересно.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#243 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 05 November 2012 - 11:27 AM

фильтр - на AJAX с изменением вариантов выбора в зависимости от уже установленных галочек),

Так так так - ану поподробнее )))
  • 0

#244 Den

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

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

Отправлено 05 November 2012 - 06:07 PM

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

Наскольно я помню, Смарти позволят узнать количество элементов в массиве (что-то типа index.last, чтоли). Соответственно, никто не мешает дописать в filter.tpl.html конструкцию

{if количество значений > некое число}
вывод селектом
{else}
вывод по старом, чекбоксами
{/if}

Надо только помнить, что чекбоксы позволяют выбрать несколько вариантов, а селект - один. Либо надо делать не совсем стандартный селект, чтобы выбирать в нем несколько вариантов.

Выпадающие чекбоксы победить пока не удалось, пробовал на основе плагина к jquery dropdown-check-list. Плагин срабатывает почему-то только для первого селекта.
Так что пока выкладываю измененый шаблон 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>


  • 0

#245 badisoft

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

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

Отправлено 05 November 2012 - 09:57 PM

Так так так - ану поподробнее )))

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

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

#246 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 05 November 2012 - 10:17 PM

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


поэтому "бесплатно и для всех" делать какие-то улучшения в этих модулях врядли буду. Мне это просто не интересно.

Тогда стоимость в студию))) плиз.
Будем заказывать :)
  • 0

#247 badisoft

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

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

Отправлено 05 November 2012 - 10:22 PM

Тогда стоимость в студию))) плиз. Будем заказывать :)

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

#248 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 05 November 2012 - 10:28 PM

Вот уж нафиг. Я это напишу бесплатно,

"Вас богатых не поймешь" )) то я не буду писать бесплатно, то я напишу бесплатно...... ну в общем если ты вдруг снова передумаешь ))) то пиши сразу в ЛС цену вопроса....
ну и на счет "ограничивать временем при платном заказе" ..... само по себе это не срочно, т.е. время выполнения можно поставить с огромным запасом или даже с двумя .....

З.Ы. меня в принципе с головой устраивает и тот вариант что сейчас есть, особенно учитывая что себе я его так и не поставил никуда, но вариант с фильтрацией "на лету" хотелось бы иметь )
  • 0

#249 badisoft

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

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

Отправлено 05 November 2012 - 11:36 PM

"Вас богатых не поймешь" )) то я не буду писать бесплатно, то я напишу бесплатно.

Этот модуль мне уже не интересен и, как следствие, не интересно его бесплатно дорабатывать. Как раз потому, что в голове уже есть новый вариант этого модуля, который тоже будет бесплатен. Когда "будет" - не знаю. За деньги писать не хочу, т.к. это напрягает по времени, а напрягаться не хочется, хочется в свое удовольствие. Обычно именно так получаются хорошие красивые продукты :).
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#250 boss

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

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

Отправлено 06 November 2012 - 07:30 PM

есть необходимость отображать определённые характеристики на выбраных разделах. Как такое можно сделать?
  • 0

#251 badisoft

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

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

Отправлено 06 November 2012 - 08:07 PM

есть необходимость отображать определённые характеристики на выбраных разделах. Как такое можно сделать?

У меня на этот стандартный вопрос "как такое можно сделать?" есть не менее стандартный ответ, имеющий варианты выбора :)
1. разобраться и написать самому
2. обратиться к специалисту и заказать доработку
3. обратиться к богу. Говорят, иногда помогает :).

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

#252 Den

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

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

Отправлено 07 November 2012 - 11:12 AM

Кто-то использует характеристики изменяющие цену товара? На странице подробного описание при добавлении
{if $product_extra[i].product_show eq 1 }
вывод характеристик
{/if}
при изменении характеристики, имеющей выбор из нескольких значений для которых прописаны изменения цены - цена товара остается без изменений. На странице краткого описания такого нет.
Может кто-нибудь проверить у себя?
  • 0

#253 Den

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

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

Отправлено 10 November 2012 - 01:04 PM

badisoft, только на Вас надежда, проверьте на тестовом сайте пожалуйста.
  • 0

#254 gsm-group

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

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

Отправлено 10 November 2012 - 04:31 PM

Кто-то использует характеристики изменяющие цену товара? На странице подробного описание при добавлении

{if $product_extra[i].product_show eq 1 }
вывод характеристик
{/if}
при изменении характеристики, имеющей выбор из нескольких значений для которых прописаны изменения цены - цена товара остается без изменений. На странице краткого описания такого нет.
Может кто-нибудь проверить у себя?


Покажите ваш product_detailed.tpl.html
  • 0

#255 badisoft

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

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

Отправлено 10 November 2012 - 09:05 PM

badisoft, только на Вас надежда, проверьте на тестовом сайте пожалуйста.

Скорее всего, это ошибка. Но - см. выше - я уже не буду это исправлять. Модуль открыт и бесплатен.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#256 Den

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

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

Отправлено 11 November 2012 - 05:35 PM

Покажите ваш product_detailed.tpl.html

вот, будьте любезны:
Прикрепленный файл  product_detailed.tpl.html   28.38К   3 Количество загрузок:

Еще обратил внимание, что при добавлении отдельного блока с фильтром по производителю, они работают только по отдельности, т.е. отмечаешь чекбокс производителя, фильтруешь, потом если поставить чекбокс в основном блоке и отфильтровать - фильтрация по производителю сбрасывается.
  • 0

#257 gsm-group

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

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

Отправлено 11 November 2012 - 06:25 PM

product_detailed.tpl.html без ошибок ( в рамках этого модуля ). Просмотрев файл и его содержимое, ВСЕ что отвечает за изменение цены на месте и работоспособно. Для уверенности залил ваш файл к себе на сайт в место своего. Все работает. Ошибка в другом месте. Желательно посмотреть на Ваш сайт (можно в личку).
  • 0

#258 badisoft

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

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

Отправлено 11 November 2012 - 06:28 PM

Скорее всего, это ошибка.

Хотя нет. Я не неделе кому-то ставил этот фильтр и там как раз проверял на вариантах характеристики работает ли показ-непоказ характеристик в описаниях. Работало. Т.е. цена менялась в зависимости от варианта.

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

Это нормально. Так и написано. Иначе как выбирать, какой выбор производителя "правильнее" - в основном блоке или в дополнительном? Да и нет основного/дополнительных, они равноправны. Где нажали кнопку "показать", там и смотрится, какие чекбоксы или селекты выбраны. "Дополнительные" блоки это просто упрощенные варианты "основного". С тем же успехом можно сделать два или три "основных" блока по разным углам сайта.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#259 Den

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

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

Отправлено 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>

Но для его исправления, к сожалению, моих познаний недостаточно.
  • 0

#260 badisoft

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

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

Отправлено 11 November 2012 - 08:42 PM

Вы меня видимо неправильно поняли

Я Вас совершенно правильно понял и могу только повторить "Это нормально. Так и написано". Фильтры равнозначны и выделяя галочкой конкретного производителя (и более ничего, т.к. в этом фильтре больше никаких характеристик нет) Вы выбираете фильтрацию по производителю и не более того. Не фильтрацию "все что в фильтре 1 плюс фильтр 2 плюс фильтр 3", а только лишь по производителю. Три разных по верстке блока фильтра это лишь дополнительная возможность получить несколько разных и удобных в разных случаях вариантов фильтра, но они никак не суммируются и не пересекаются.

Другими словами (возможно, так будет понятнее) каждый из этих блоков выдает исполняемому модулю задание "отфильтруй-ка мне вот это". Выдает совершенно одинаково и никак не учитывая галочки, установленные или не установленные в других блоках фильтра. Можно их тоже учитывать, навскидку это не кажется особенно сложным, но я себе такой задачи не ставил и "фильтр-2" "фильтр-3" сделаны, скорее, как неожиданно удачные довески к основному TPL.HTML, упрощенные варианты "основного" фильтра в другом дизайне.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)