@ART4

Что не так в фильтре?

Добрый вечер, помогите разгадать загадку, весь мозг сломал. Хочу фильтр перевести из чекбокса в селект. При нажатие кнопки подобрать, url фильтра не правильно становится...
Имеется фильтр в виде чекбокс

{* Фильтр по свойствам *}
{if $features}
    {foreach $features as $key=>$f}
	    {* Название свойства *}
	    <div class="h5 bg-info p-x-1 p-y-05" data-feature="{$f->id}">{$f->name}</div>
        <div class="m-b-2 p-x-05">
	        {* Сброс всех свойств *}
	        <div style="width: 45%; float: left;">
		        <label class="c-input c-checkbox">
			        <input onchange="window.location.href='{furl params=[$f->url=>null, page=>null]}'" type="checkbox"{if !$smarty.get.$key} checked{/if}/>
			        <span class="c-indicator"></span>
			        <span data-language="{$translate_id['features_all']}">{$lang->features_all}</span>
		        </label>
	        </div>
	        {* Значения свойств *}
            {foreach $f->options as $o}
	            <div style="width: 45%; float: left;">
		            <label class="c-input c-checkbox">
			            <input onchange="window.location.href='{furl params=[$f->url=>$o->translit, page=>null]}'" type="checkbox"{if $smarty.get.{$f@key} && in_array($o->translit,$smarty.get.{$f@key})} checked{/if}/>
			            <span class="c-indicator"></span>
			            {$o->value|escape}
		            </label>
	            </div>
            {/foreach}
        </div>
    {/foreach}
{/if}


И имеется скрипт в селекте
{if $features}
	<form method=get enctype="multipart/form-data">
		<table id="features">
			{foreach $features as $key=>$f}
			<tr>
				<td class="feature_name">
					{$f->name}:
				</td>
				<td>
					<select class="c-input feature_values" size="1" data-feature="{$f->id}" name="{$f->id}">
						<option value="">Выбрать</option>
{foreach $f->options as $o}
	<option value="{$o->translit}" {if $fil[$f->id] == $o->translit}selected{/if}>{$o->value}</option>
{/foreach}
					</select>
				</td>
			</tr>
			{/foreach}
		</table>
		<input type="submit" value="Показать">
	</form>
{/if}


Ссылка когда в селекте выбираю в фильтре
/catalog/shiny?336=13&337=&326=&324=&338=&339=&401=
где 336, 337, 326 - это ID свойства товара.

А в рабочем варианте выводит ссылку
/catalog/shiny/radius-13

Как я понял, если вставить name="{$f->url=>$o->translit, page=>null]}" то что то измениться, но тогда смарти ругается......

ХХХЕЛЛП
  • Вопрос задан
  • 90 просмотров
Пригласить эксперта
Ответы на вопрос 1
@alexalexes
В чекбоксах используется принудительное изменение window.location.href на onchange - это вызывает перезагрузку страницы с новыми параметрами. Построением классической формы и отправкой параметров по атрибутам name даже и не пахнет. (Вероятно, из-за "числовых" имен get-параметров).
а) В select нужно аналогично на onchange событии проанализировать, какую опцию выбрали и сконструировать аналогичным методом url для перезагрузки страницы с новыми параметрами, подставив новый url в window.location.href.
б) Другой вариант. Заменить тип кнопки "Показать" на button и добавить обработчик onclick, который все равно будет генерировать ссылку для window.location.href, а не отправлять форму классическим способом.
PS: Честно, никогда не встречал, чтобы параметры get имели чисто числовое название, не считая тех случаев, где используется якорь #.
Думаю, это плохая практика именования. Я бы использовал бы хоть один символ впереди названия, например,
?p1=1&p256=23
Прокомментируйте, кто в теме таких тонкостей.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы