Телеграм: @camouf_ru Почта: mihail@bazarow.ru

Сортировать товары по названию, цене и дате поступления в каталоге Битрикс

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

Но можно воспользоваться вот таким способом:

В section.php добавляем:

<?if ($_GET["sort"] == "name" ||
$_GET["sort"] == "catalog_PRICE_3" ||
$_GET["sort"] == "property_PRODUCT_TYPE" ||
$_GET["sort"] == "timestamp_x"){
$arParams["ELEMENT_SORT_FIELD"] = $_GET["sort"];
$arParams["ELEMENT_SORT_ORDER"] = $_GET["method"];
}else{}?>

В template.php:

<p>Сортировать по:

<a <?if ($_GET["sort"] == "name"):?> class="actived" <?endif;?> href="<?=$arResult["SECTION_PAGE_URL"]?>?sort=name&method=asc">
Названию
</a>

<a <?if ($_GET["sort"] == "catalog_PRICE_3"):?> class="actived" <?endif;?> href="<?=$arResult["SECTION_PAGE_URL"]?>?sort=catalog_PRICE_3&method=asc">
Цене
</a>

<a <?if ($_GET["sort"] == "timestamp_x"):?> class="actived" <?endif;?> href="<?=$arResult["SECTION_PAGE_URL"]?>?sort=timestamp_x&method=desc">
Новые поступления
</a>

</p>

Пример работы:

Сортировка в каталоге битрикс

Просмотров: 34144 | Комментариев: 25

Комментарии

Внимание! все сообщения проходят премодерацию. Ваше сообщение появится после проверки
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Защита от автоматических сообщений
Загрузить файл
Нажимая кнопку "Отправить", Вы принимаете условия
Политики конфиденциальности и обработки персональных данных
Анна
Здравствуйте!
А если мне нужно фильтр и сортировку вывести после описания раздела, то придется в шаблон (в файл template.php) catalog.section нужно перенести код шаблона template.php компонента catalog.smart.filter ? А то я ничего умнее не придумала.
Спасибо.
Имя Цитировать
Михаил Базаров
Цитата
Анна пишет:
Здравствуйте!
А если мне нужно фильтр и сортировку вывести после описания раздела, то придется в шаблон (в файл template.php) catalog.section нужно перенести код шаблона template.php компонента catalog.smart.filter ? А то я ничего умнее не придумала.
Спасибо.
Если я првильно понял суть задачки- то лучше было вставить вызов фильтра в section.php (лежит в корне шаблона комплексного компанента "каталог"

Хотя конечно без особой разницы, просто немного не по "фен шую", если кто-то после Вас, однажды будет дорабатывать или переделывать- немножко поматериться. Вообще часто сталкиваюсь с доработками сайтов- после вот такого "а работает и фиг с ним )" - немного дороже беру, за трату времени на понимание, но чаще проще переделать чем понять.
Имя Цитировать
Гость сайта
Цитата
Михаил Базаров пишет:
Цитата
Анна пишет:
Здравствуйте!
А если мне нужно фильтр и сортировку вывести после описания раздела, то придется в шаблон (в файл template.php) catalog.section нужно перенести код шаблона template.php компонента catalog.smart.filter ? А то я ничего умнее не придумала.
Спасибо.
Если я првильно понял суть задачки- то лучше было вставить вызов фильтра в section.php (лежит в корне шаблона комплексного компанента "каталог"

Хотя конечно без особой разницы, просто немного не по "фен шую", если кто-то после Вас, однажды будет дорабатывать или переделывать- немножко поматериться. Вообще часто сталкиваюсь с доработками сайтов- после вот такого "а работает и фиг с ним )" - немного дороже беру, за трату времени на понимание, но чаще проще переделать чем понять.
Вызываю я его по фен шую, в section.php
А вот выводить хочу после названия и описания подкаталога.

Т.е. так:

----------------------------------------------------
Юбки (заголовок)
Наши юбки бла бла бла...(описание)

фильтр и сортировка

элементы каталога.
----------------------------------------------------

Если вызываю фильтр в section.php, и его шаблон храню, как положено в мой_шаблонcomponents/bitrix/catalog.smart.filter/visual_horiz/template.php

То фильтр выводится на сайте над название и описанием.
Может  я не там вывожу название и описание подкаталога?
я вывожу его в catalog.section/.default/template.php
Имя Цитировать
Игорь
День добрый
а если надо сортировать по какому то свойству?
Имя Цитировать
Гость сайта
Цитата
Игорь пишет:
День добрый
а если надо сортировать по какому то свойству?
$_GET["sort"] == "property_PRODUCT_TYPE" - где PRODUCT_TYPE имя свойства
Имя Цитировать
Гость сайта
Добрый день, а как вывести сортировку, если мы находимся на странице выдачи результатов поиска и компонент  каталога комплексный? Ведь при таком вызове мы потеряем параметры в GET типа &how=r&q=строка_запроса
Имя Цитировать
Андрей
Здравствуйте!
Спасибо за вариант.
Одно но: Ваша сортировка работает только в один конец, т.е. asc или desc.
Не подскажете, как сделать на одной кнопке по цене, чтобы она меняла направление после каждого нажатия?
Имя Цитировать
Владимир
Здравствуйте, сделал все как указанно, но у меня почему то не работает. при нажатии на сортировку, например, по цене, исчезают все товары. В чем может быть проблема подскажите пожалуйста
Имя Цитировать
Михаил Базаров
Цитата
Владимир пишет:
Здравствуйте, сделал все как указанно, но у меня почему то не работает. при нажатии на сортировку, например, по цене, исчезают все товары. В чем может быть проблема подскажите пожалуйста
Перепроверьте все еще раз внимательно, должно работать.
Имя Цитировать
Владимир
Цитата
Михаил Базаров пишет:
Цитата
Владимир пишет:
Здравствуйте, сделал все как указанно, но у меня почему то не работает. при нажатии на сортировку, например, по цене, исчезают все товары. В чем может быть проблема подскажите пожалуйста
Перепроверьте все еще раз внимательно, должно работать.
Перепроверил несколько раз, никак не могу понять в чем причина, сможете помочь? Вот участок кода который отвечает за цену и передачу товара в корзину:

<td width="22%" align="right">
<?if($arPrice = $arElement["PRICES"][$code] ;) :?>
<?if($arPrice["DISCOUNT_VALUE"] < $arPrice["VALUE"] ;) :?>
<?=$arPrice["PRINT_VALUE"]?><br /><span class="catalog-price"><?=$arPrice["PRINT_DISCOUNT_VALUE"]?></span>
<?else:?>
<span class="catalog-price"><?=$arPrice["PRINT_VALUE"]?></span>
<?endif?>
<?else:?>
 
<?endif;?>
<?endforeach;?>
<?if(count($arResult["PRICES"] ;)  > 0):?>
<?if($arElement["CAN_BUY"] ;) :?>
"title="купить">

 
<?elseif((count($arResult["PRICES"] ;)  > 0) || is_array($arElement["PRICE_MATRIX"] ;) ):?>
<?=GetMessage("CATALOG_NOT_AVAILABLE" ;) ?>
<?endif?> 
</td>
<?endif;?>
</tr>
Имя Цитировать
Guest
Как я понимаю о кэше можно забыть с таки вариантом?
Имя Цитировать
Михаил Базаров
Цитата
Guest пишет:
Как я понимаю о кэше можно забыть с таки вариантом?
записка достаточно древняя. Глянте в новом типовом решении магазин, что ставится с битрикс- там это уже реализовно с кешем :)
Имя Цитировать
George
Подскажите пожалуйста как сделать сортировку по полю количество товаров?
Имя Цитировать
Guest
Подскажите пожалуйста, почему при нажатии на ссылку для сортировки переводит на главную страницу?
Имя Цитировать
Михаил Базаров
Цитата
Guest пишет:
Подскажите пожалуйста, почему при нажатии на ссылку для сортировки переводит на главную страницу?
Видимо в начале ссылки на сортировку оставили "/" - уберите его
Имя Цитировать
Евгений Евгений
Возник вопрос а как сделать сортировку в news.list
пытался так
В /bitrix/news/novnov/section.php
Код
<?
$arParams["SORT_BY1"] = !empty(trim($arParams["SORT_BY1"]))? trim($arParams["SORT_BY1"]) : "NAME";$arParams["SORT_ORDER1"] = !empty(trim($arParams["SORT_ORDER1"]))? trim($arParams["SORT_ORDER1"]) : "ASC";   

?>

а в /news/novnov/bitrix/news.list/template.php
Код
<p class="sort">Сортировка:

    <a <?if ($_GET["sort"] == "NAME"):?> class="active" <?endif;?>       href="/novosti/?sort=NAME&method=asc">название</a>       
 
      
</p>
Не работает
Имя Цитировать
Антон. К
Добрый вечер, Михаил.
Подскажи как отсортировать товар со скидками что бы товар со скидкой оказался вверху страницы?
Имя Цитировать
svetlana.sukova
Добрый день!
Подскажите пожалуйста как реализовать эту сортировки чтоб не было проблем с кешем?
Также сортировка по цене не работает для товаров с торговыми предложениями, есть ли какое-то решение для такой проблемы?
Спасибо :)
Имя Цитировать
Михаил Базаров
Цитата
svetlana.sukova написал:
Добрый день!
Подскажите пожалуйста как реализовать эту сортировки чтоб не было проблем с кешем?
Также сортировка по цене не работает для товаров с торговыми предложениями, есть ли какое-то решение для такой проблемы?
Спасибо
ПРоблем с кешем, быть не должно (во всяком случае не сталкивался)
По предложениям, вот так не "рассказать" в рамках ответа. Быть может запишу видео, следите на ютуб канале
Имя Цитировать
Jekas
А подскажите как сделать сортировку вверх-вниз при клике на одну ссылку?
Имя Цитировать
Михаил Базаров
Цитата
Jekas написал:
А подскажите как сделать сортировку вверх-вниз при клике на одну ссылку?
Можно по простому, меняя порядок сортировки asc / desc
Типа того
Код
<a <?if ($_GET["sort"] == "catalog_PRICE_3"):?> class="actived" <?endif;?> 
href="<?=$arResult["SECTION_PAGE_URL"]?>?sort=catalog_PRICE_3&method=asc"> 
Цене от дешевых
</a> 

<a <?if ($_GET["sort"] == "catalog_PRICE_3"):?> class="actived" <?endif;?> 
href="<?=$arResult["SECTION_PAGE_URL"]?>?sort=catalog_PRICE_3&method=desc"> 
Цене от дорогих
</a> 
У той, которая нажатая, будет класс actived - с помощью него, просто прятать ее в display:none
Имя Цитировать
Jekas
Цитата
Михаил Базаров пишет:
Цитата
Jekas написал:
А подскажите как сделать сортировку вверх-вниз при клике на одну ссылку?
Можно по простому, меняя порядок сортировки asc / desc
Типа того
Код
 <a <?if ($_GET["sort"] == "catalog_PRICE_3"):?> class="actived" <?endif;?> 
href="<?=$arResult["SECTION_PAGE_URL"]?>?sort=catalog_PRICE_3&method=asc"> 
Цене от дешевых
</a> 

<a <?if ($_GET["sort"] == "catalog_PRICE_3"):?> class="actived" <?endif;?> 
href="<?=$arResult["SECTION_PAGE_URL"]?>?sort=catalog_PRICE_3&method=desc"> 
Цене от дорогих
</a> 
 
У той, которая нажатая, будет класс actived - с помощью него, просто прятать ее в display:none
Только оно будет для двух случаев одинаково и тут не проверить (
Имя Цитировать
Михаил Базаров
Цитата
Jekas написал:
Только оно будет для двух случаев одинаково и тут не проверить (

Ну да, что то не подумал  :)
Тогда, надо подумать. Можно изначальные параметры переписать и для каждого направления сортировки создать отдельную логику в
Код
<?if ($_GET["sort"] == "name" || 
$_GET["sort"] == "catalog_PRICE_3" || 
$_GET["sort"] == "property_PRODUCT_TYPE" || 
$_GET["sort"] == "timestamp_x"){ 
$arParams["ELEMENT_SORT_FIELD"] = $_GET["sort"]; 
$arParams["ELEMENT_SORT_ORDER"] = $_GET["method"]; 
}else{}?>
Имя Цитировать
Jekas
Цитата
Михаил Базаров пишет:
Цитата
Jekas написал:
Только оно будет для двух случаев одинаково и тут не проверить (
Ну да, что то не подумал
Тогда, надо подумать. Можно изначальные параметры переписать и для каждого направления сортировки создать отдельную логику в
Код
 <?if ($_GET["sort"] == "name" || 
$_GET["sort"] == "catalog_PRICE_3" || 
$_GET["sort"] == "property_PRODUCT_TYPE" || 
$_GET["sort"] == "timestamp_x"){ 
$arParams["ELEMENT_SORT_FIELD"] = $_GET["sort"]; 
$arParams["ELEMENT_SORT_ORDER"] = $_GET["method"]; 
}else{}?>
 
А можете показать на примере, если конечно Вам не сложно )
Имя Цитировать
a13z2005@yandex.ru
Добрый день Михаил.
Подскажите пожалуйста - используя вашу сортировку в уроке - как выставить еще правило дял сортировки по умолчанию (к примеру по свойству)?
Имя Цитировать
Поделиться страницей Спасибо, это помогает развивать сайт.
Мой youtube канал. Сюда я выкладываю видео уроки по разработке сайтов и не только. Подписывайтесь, скоро будет серия свежих видео-инструкций:
Перейти на канал
Заметки разработчика

Примерно с 2013-го года пишу, короткие и не очень, заметки по разработке сайтов на Битрикс. Возможно, будут полезны кому-то еще. Во всех заметках есть возможность комментирования и обсуждения. Вы можете задавать уточняющие вопросы прямо там- отвечаю или дополняю заметки по возможности.

Заказaть разработку attention