[Помощь] Сортировка выпадающим списком

Тема в разделе "WebAsyst", создана пользователем sergfes, 31 окт 2013.

Модераторы: mdss
  1. sergfes

    sergfes Постоялец

    Регистр.:
    20 май 2012
    Сообщения:
    120
    Симпатии:
    13
    В файле /published/SC/html/scripts/templates/frontend/category.tpl.html вывожу сортировку выпадающим списком:
    Код:
    {if $string_product_sort}
    <b>Сортировать по:˜˜</b>
    <select onchange="window.location=this.value">
    <option selected="selected">Выберите из списка</option>
    <option value="/category/{$selected_category.slug}/">Без сортировки</option>
    <option value="/category/{$selected_category.slug}/?sort=name&direction=ASC">Наименованию А-Я</option>
    <option value="/category/{$selected_category.slug}/?sort=name&direction=DESC">Наименованию Я-А</option>
    <option value="/category/{$selected_category.slug}/?sort=Price&direction=ASC">Цене, сначала дешевые</option>
    <option value="/category/{$selected_category.slug}/?sort=Price&direction=DESC">Цене, сначала дорогие</option>
    </select>
    {/if}
    Сортировка прекрасно работает. Но при выборе варианта сортировки после обновления страницы, выбор не запоминается. Собственно вопрос к знатокам: как запилить условие для selected?
    У меня есть другое выпадающее меню:
    Код:
    <form method="post" action="">
        Выводить на странице товаров:
                    <select size="1" name="menu1" onchange="submit();" >
                <option value="12" {if $products_per_page=='12'}selected="selected"{/if}>12</option>
                <option value="30" {if $products_per_page=='30'}selected="selected"{/if}>30</option>
                <option value="50" {if $products_per_page=='50'}selected="selected"{/if}>50</option>
                <option value="100" {if $products_per_page=='100'}selected="selected"{/if}>100</option>
            </select>
    </form>
    Так вот в нем все работает благодаря условиям типа {if $products_per_page=='12'}selected="selected"{/if}
    Но сделать так же для сортировки не хватает опыта. Как правильно это сделать? Заранее благодарен за помощь!
     
  2. bloodirain

    bloodirain Постоялец

    Регистр.:
    10 июн 2007
    Сообщения:
    61
    Симпатии:
    35
    Как бы я сделал, покопался в {debug} и выяснил, какая переменная меняется при выборе option и составлял условие.
     
    sergfes нравится это.
  3. sergfes

    sergfes Постоялец

    Регистр.:
    20 май 2012
    Сообщения:
    120
    Симпатии:
    13
    Спасибо! щас погуглю куда вставить и пороюсь.
    Не получилось найти переменную(
    Попробовал как ShopOS сделать вот такое условие:
    Код:
    <option value="/category/{$selected_category.slug}/?sort=name&direction=ASC" {php}if ($_GET['sort'] == 'name' & $_GET['direction'] == 'asc'){{/php}selected="selected"{php}}{}{/php}>Наименованию А-Я</option>
    Но при любой сортировке, оно срабатывает...

    Не получается ничего... Прошу знающих помочь :(
     
    Последнее редактирование: 6 ноя 2013
  4. Phoenix_666

    Phoenix_666

    Регистр.:
    27 дек 2007
    Сообщения:
    162
    Симпатии:
    31
    Тоже очень интересует решение как присвоить selected активному пункту

    Нашел условие с предыдущей версии:

    {if $sort == "name" && $direction == "ASC"} selected{/if}

    но с ссылками ЧПУ <option value="/category/{$selected_category.slug}/?sort=name&direction=ASC">
    оно у меня не срабатывает
    Подскажите в чем может быть причина?
     
    Последнее редактирование: 15 май 2014
  5. mdss

    mdss ♖♘♗♕♔♗♘♖

    Moderator
    Регистр.:
    20 фев 2007
    Сообщения:
    1.126
    Симпатии:
    668
    у меня реализовано вот так. Первым наперво разметка в шаблоне и условия отображения
    HTML:
    <select onchange="window.location=this.value" class="select sort_select">
    	<option value="{$_category_url}?sort=name&amp;direction=ASC"{if $string_product_sort_row == 'name' && $string_product_current == 'ASC'} selected="selected"{/if}>{'sort_name_asc'|translate}</option>
    	<option value="{$_category_url}?sort=name&amp;direction=DESC"{if $string_product_sort_row == 'name' && $string_product_current == 'DESC'} selected="selected"{/if}>{'sort_name_desc'|translate}</option>
    	<option value="{$_category_url}?sort=Price&amp;direction=ASC"{if $string_product_sort_row == 'Price' && $string_product_current == 'ASC'} selected="selected"{/if}>{'sort_price_asc'|translate}</option>
    	<option value="{$_category_url}?sort=Price&amp;direction=DESC"{if $string_product_sort_row == 'Price' && $string_product_current == 'DESC'} selected="selected"{/if}>{'sort_price_desc'|translate}</option>
    	<option value="{$_category_url}?sort=product_code&amp;direction=ASC"{if $string_product_sort_row eq 'product_code' && $string_product_current eq 'ASC'} selected="selected"{/if}>{'sort_code_asc'|translate}</option>
    	<option value="{$_category_url}?sort=product_code&amp;direction=DESC"{if $string_product_sort_row eq 'product_code' && $string_product_current eq 'DESC'} selected="selected"{/if}>{'sort_code_desc'|translate}</option>
    </select>
    в файле published\SC\html\scripts\includes\category.php
    ищем строку
    PHP:
    $smarty->assign"string_product_sort"$sort_string );
    после нее добавляем
    PHP:
    $smarty->assign"string_product_sort_row"$current_sort_field);
    $smarty->assign"string_product_current"$current_sort_direction);
    вот и все. Но если необходимо, чтобы можно было сделать такую сортировку и в результатах простого поиска, то в файле published\SC\html\scripts\modules\test\_methods\search_simple.php дописываем тоже самое после такой же строки.
    В шаблоне /published/SC/html/scripts/templates/frontend/search_simple.html необходимо дописать вот это
    HTML:
    <select onchange="window.location=this.value" class="select sort_select">
    	<option value="{$smarty.get.ukey}/?searchstring={$searchstring}&amp;sort=name&amp;direction=ASC"{if $string_product_sort_row == 'name' && $string_product_current == 'ASC'} selected="selected"{/if}>{'sort_name_asc'|translate}</option>
    	<option value="{$smarty.get.ukey}/?searchstring={$searchstring}&amp;sort=name&amp;direction=DESC"{if $string_product_sort_row == 'name' && $string_product_current == 'DESC'} selected="selected"{/if}>{'sort_name_desc'|translate}</option>
    	<option value="{$smarty.get.ukey}?searchstring={$searchstring}&amp;sort=Price&amp;direction=ASC"{if $string_product_sort_row == 'Price' && $string_product_current == 'ASC'} selected="selected"{/if}>{'sort_price_asc'|translate}</option>
    	<option value="{$smarty.get.ukey}?searchstring={$searchstring}&amp;sort=Price&amp;direction=DESC"{if $string_product_sort_row == 'Price' && $string_product_current == 'DESC'} selected="selected"{/if}>{'sort_price_desc'|translate}</option>
    	<option value="{$smarty.get.ukey}?searchstring={$searchstring}&amp;sort=product_code&amp;direction=ASC"{if $string_product_sort_row eq 'product_code' && $string_product_current eq 'ASC'} selected="selected"{/if}>{'sort_code_asc'|translate}</option>
    	<option value="{$smarty.get.ukey}?searchstring={$searchstring}&amp;sort=product_code&amp;direction=DESC"{if $string_product_sort_row eq 'product_code' && $string_product_current eq 'DESC'} selected="selected"{/if}>{'sort_code_desc'|translate}</option>
    </select>
    Для расширенного поиска дописываем в этом файле published\SC\html\scripts\modules\test\_methods\category_search_result.php. Теоретически в шаблоне можно прописать такой же код как для категории. Должно сработать.

    ЗЫ у меня добавлена сортировка по артикулу и для выпадающего списка задан свой класс, т.к. идет стилизация селекта. Не забываем менять на свое.
     
    Последнее редактирование: 23 сен 2014
    Phoenix_666 и sergfes нравится это.
  6. sergfes

    sergfes Постоялец

    Регистр.:
    20 май 2012
    Сообщения:
    120
    Симпатии:
    13
    У меня не получалось, пока я в value= и в условии не поставил слово price с учетом регистра. Поставил Price (с большой буквы).
    То есть было так:
    Код:
    <option value="{$smarty.get.ukey}?searchstring={$searchstring}&amp;sort=Price&amp;direction=ASC"{if $string_product_sort_row == 'price' && $string_product_current == 'ASC'} selected="selected"{/if}>{'sort_price_asc'|translate}</option>
        <option value="{$smarty.get.ukey}?searchstring={$searchstring}&amp;sort=Price&amp;direction=DESC"{if $string_product_sort_row == 'price' && $string_product_current == 'DESC'} selected="selected"{/if}>{'sort_price_desc'|translate}</option>
    А заработало так:
    Код:
    <option value="{$smarty.get.ukey}?searchstring={$searchstring}&amp;sort=Price&amp;direction=ASC"{if $string_product_sort_row == 'Price' && $string_product_current == 'ASC'} selected="selected"{/if}>{'sort_price_asc'|translate}</option>
        <option value="{$smarty.get.ukey}?searchstring={$searchstring}&amp;sort=Price&amp;direction=DESC"{if $string_product_sort_row == 'Price' && $string_product_current == 'DESC'} selected="selected"{/if}>{'sort_price_desc'|translate}</option>
    Извините за занудство.
     
    Последнее редактирование: 24 май 2014
    Phoenix_666 нравится это.
  7. Phoenix_666

    Phoenix_666

    Регистр.:
    27 дек 2007
    Сообщения:
    162
    Симпатии:
    31
    Товарищи, простите за тупизм.

    Но не могли бы подробней описать запросы которые будет формировать выпадающий список в других вариантах? Интересуют значение value=" "