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

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

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

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

В 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>

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

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


Здравствуйте!
А если мне нужно фильтр и сортировку вывести после описания раздела, то придется в шаблон (в файл 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]
<?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 пишет:
Подскажите пожалуйста, почему при нажатии на ссылку для сортировки переводит на главную страницу?
Видимо в начале ссылки на сортировку оставили "/" - уберите его
Возник вопрос а как сделать сортировку в 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 написал:
Добрый день!
Подскажите пожалуйста как реализовать эту сортировки чтоб не было проблем с кешем?
Также сортировка по цене не работает для товаров с торговыми предложениями, есть ли какое-то решение для такой проблемы?
Спасибо
ПРоблем с кешем, быть не должно (во всяком случае не сталкивался)
По предложениям, вот так не "рассказать" в рамках ответа. Быть может запишу видео, следите на ютуб канале
А подскажите как сделать сортировку вверх-вниз при клике на одну ссылку?
Михаил
Цитата
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 написал:
А подскажите как сделать сортировку вверх-вниз при клике на одну ссылку?
Можно по простому, меняя порядок сортировки 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 написал:
Только оно будет для двух случаев одинаково и тут не проверить (
Ну да, что то не подумал
Тогда, надо подумать. Можно изначальные параметры переписать и для каждого направления сортировки создать отдельную логику в
Код
 <?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{}?>
 
А можете показать на примере, если конечно Вам не сложно )
Добрый день Михаил.
Подскажите пожалуйста - используя вашу сортировку в уроке - как выставить еще правило дял сортировки по умолчанию (к примеру по свойству)?

Кроме создания сайтов, я так же веду блог с заметками о вебразработке, записываю бесплатные видеоуроки и содержу форум, на котором можно задавать вопросы и просто общаться. Заметки, преимущественно - это короткие или подробные рецепты, по реализации часто требуемого функционала- в рамках разработки сайтов на 1С-Битрикс

Показать еще