- Помогите с сортировкой товара
- Сортировка товаров и показ выбранного пользователем количества товаров в 1С-Битрикс
- Не работает сортировка в news,news.list
- Продукты
- Управление сайтом
- Битрикс24
- Мобильное приложение
- Интернет-магазин + CRM
- Решения
- Для интернет-магазинов
- Для медорганизаций
- Для учебных заведений
- Для госорганизаций
- Каталог готовых решений
- Внедрение
- Выбрать партнера
- Проверить партнера
- Стать партнером
- Сортировка торговых предложений по цене в карточке товара
- Сортировка по цене
Помогите с сортировкой товара
Добрый день. Очень прошу помочь. Никак могу разобраться с тем, чтобы настроить отображение товаров таким образом, чтобы товары, у которых количество «0» выводились в конце списка. Количество «0», естественно, подразумевает, что таковых нет в наличии. На данный момент сортировка выставлена по дате изменения. Второй критерий хочу сделать по количеству, убыванию. Но никакой сортировки почему-то нет. Выставил в настройках компонента вот что:
Поле для второй сортировки товаров в разделе: CATALOG_QUANTITY
Порядок второй сортировки товаров в разделе:по убыванию
Не могу понять, почему ничего не работает, не сортируется. Помогите, пожалуйста, как это настроить!
Привет! Мы делали так в /components/bitrix/catalog/.default/section.php
GetPageName())
<
CModule::IncludeModule(‘catalog’);
$dbRes = CCatalogGroup::GetList(
array(), array(‘NAME’ => $arParams[‘PRICE_CODE’][0]
);
if ($arRes = $dbRes->Fetch())
$arResult[‘_PRICE_ID’] = $arRes[‘ID’];
>
$arAvailableSort = array(
«name» => Array(«name», «asc» ,
«price» => Array(‘catalog_PRICE_’.$arResult[‘_PRICE_ID’], «asc» ,
//»price» => Array(‘PROPERTY_MINIMUM_PRICE’, «asc» ,
«quantity» => Array(«CATALOG_QUANTITY», «desc» ,
«shows» => Array(«shows», «desc» ,
$sort = array_key_exists(«sort», $_REQUEST) && array_key_exists(ToLower($_REQUEST[«sort»] , $arAvailableSort) ?
$arAvailableSort[ToLower($_REQUEST[«sort»] ][0] : «CATALOG_QUANTITY»;
$sort_order = array_key_exists(«order», $_REQUEST) && in_array(ToLower($_REQUEST[«order»] , Array(«asc», «desc» ) ? ToLower($_REQUEST[«order»] : «desc»;
$val):
$className = ($sort == $val[0] ? ‘ current’ : »;
if ($className)
$className .= ($sort_order == ‘asc’) ? ‘ asc’ : ‘ desc’;
$newSort = ($sort == $val[0] ? ($sort_order == ‘desc’ ? ‘asc’ : ‘desc’) : $arAvailableSort[$key][1];
?>
GetCurPageParam(‘sort=’.$key.’&order=’.$newSort, array(‘sort’, ‘order’))?>» >» rel=»nofollow»>
Источник
Сортировка товаров и показ выбранного пользователем количества товаров в 1С-Битрикс
Исторически так сложилось, что комплексный компонент 1С-Битрикс не позволяет пользователю в публичной части отсортировать товары, хотя бы по цене, дате, наименованию, а также выбрать сколько товаров на странице ему выбрать. Но ни один из интернет-магазинов не обходится без такого функционала, который кстати включен в почти все шаблоны готовых интернет-магазинов в Маркетплэйс. Но для реализовать блоки «Сортировать по: . » и «Показать по: . » достаточно просто. Нужно всего-лишь использовать массив $_REQUEST и метод API 1С-Битрикс GetCurPageParam() для передачи данных в этот массив.
Приступим!
Для начала определимся, что от нас хотят:
- Вывести справа над списком товаров блок «Показать по: 18 36 54 72». (По умолчанию выводится 9).
- Слева над списком товаров вывести блок «Сортировать по: цене, наименованию, дате».
- Повторное нажатие на уже выбранный вариант сортировки переключает направление сортировки.
- Дата — дата изменения, цена — отображаемая цена товара.
Пойдем по порядку и начнем с показа выбранного пользователем из предложенных количества товаров на странице.
За отображение количества товаров на странице отвечает параметр PAGE_ELEMENT_COUNT . В него мы и будем передавать выбранное пользователем количество с помощью $_REQUEST и GetCurPageParam() .
Для начала заведем соответствующую переменную и по-умолчанию присвоим ей значение заданное в параметрах компонента. А затем при клике пользователя на нужное ему количество элементов будем его модифицировать.
Следующий код предлагается размещать перед подключением компонента catalog.section . Если используется комплексный компонент catalog , то в файле в котором происходит вызов компонента catalog.section выводящего товары на нужной странице.
И теперь передадим полученное значение в компонент:
Теперь разберемся с сортировкой. Она не намного сложнее, за исключением того, что нам нужно проверять текущее направление и менять его. Для этого в методе GetCurPageParam() мы будем передавать два параметра sortBy и orderBy . А затем в соответствующих переменных передавать их в параметры компонента «ELEMENT_SORT_FIELD» и «ELEMENT_SORT_ORDER» соответственно. По умолчанию сортировка должна осуществляться с помощью внутреннего поля сортировки 1С-Битрикс — sort .
Проверяем направление сортировки и меняем в случае необходимости:
Выводим ссылки на сортировку:
Параметр name принимается полем «ELEMENT_SORT_FIELD» для сортировки по наименованию товара без дополнительного вмешательства а вот для даты и цены мы должны уточнить, какой из параметров элемента инфоблока мы имеем ввиду.
Для даты нам нужно значение поля ‘timestamp_x’ , отвечающего за дату изменения. Для цены мы должны узнать наименование типа цены, которая выводится из поля элемента инфоблока. Для этого нужно распечатать массив $arItem в шаблоне компонента (в моем случае catalog.section ) либо с помощью var_dump($arItem); , либо ‘; . Находим поле массива отвечающего за вывод цены и копируем его название, в моем случае это оказалось CATALOG_PRICE_1 . Стоит обратить внимание, что в случае с ценой использовать нужно название того поля, которые содержит значение цены без валюты.
И передадим полученные данные в переменную $sortBy :
И передадим значения в параметры компонента:
Вот собственно и все. В результате получится примерно такая строка:
Теперь пользователь может сортировать товары и выбирать сколько товаров он хочет видеть на странице, и разумеется переходить по страницам и фильтровать товары ничего не теряя.
Источник
Не работает сортировка в news,news.list
Добрый день пытаюсь сделать сортировку в новостях.
В /bitrix/news/novnov/section.php
Прописал
а в /news/novnov/bitrix/news.list/template.php
Прописал
Сортировка не работает кто знает в чем проблема может быть?
| Цитата |
|---|
| Дмитрий Ганин написал: Чуть кровь из глаз не полилась от вашего кода. Ну да ладно. У вас компонент news.list используется? В news.list сортировка задается параметрами SORT_BY1/SORT_BY2. Направление сортировки SORT_ORDER1/SORT_ORDER2 соответственно. |
а можете показать пример как должно быть, а то не могу понять.
| Цитата |
|---|
| Евгений Шум написал: Дмитрий Ганин , |
Ну и со вторым соответственно так же
В итоге что-то не работает
получается так в компоненте
новости
а в /news/novnov/bitrix/news.list/template.php
Прописал
в верху путь получается такой и не сортирует
Все равно не сортирует вот так
| Цитата |
|---|
| Евгений Шум написал: Все равно не сортирует вот так |
Да у вас же параметры называются по другому, я же для примера написал.
Продукты
Управление сайтом
Битрикс24
Мобильное приложение
Интернет-магазин + CRM
Решения
Для интернет-магазинов
Для медорганизаций
Для учебных заведений
Для госорганизаций
Каталог готовых решений
Внедрение
Выбрать партнера
Проверить партнера
Стать партнером
© 2001-2021 «Битрикс», «1С-Битрикс». Работает на 1С-Битрикс: Управление сайтом.
Источник
Сортировка торговых предложений по цене в карточке товара
Есть комплексный компонент каталога, на карточке товара которого выводятся торговые предложения с названием и ценой.
Нужно сортировать эти предложения по цене.
В настройках компонента есть OFFERS_SORT_FIELD, OFFERS_SORT_ORDER. Список свойств скуден и цены там конечно же нет.
Но даже если поставить OFFERS_SORT_FIELD=sort, не работает. Т.е. сортировка не работает даже по тому скудному набору полей которые есть.
Как сортировать торговые предложения по цене? Вообще стандартными средствами это возможно?
Заранее спасибо за помощь!
P.S.
В result_modifier.php компонента catalog.element есть конструкция
Если отключить этот кусок кода, т.е. доп сортировку предложений в result_modifier.php.
То сортировка по OFFERS_SORT_FIELD начинает адекватно и логично работать (по цене отрабатывает CATALOG_PRICE_1).
Что это за код в result_modifier.php на основе каких параметров он формирует доп сортировку и нужна ли она?
вкратце /**
* Sorting array by column.
* You can use short mode: Collection :: sortByColumn ($arr, ‘value’); This is equal Collection :: sortByColumn ($arr, array(‘value’ => SORT_ASC))
*
* More example:
* Collection :: sortByColumn ($arr, array(‘value’ => array(SORT_NUMERIC, SORT_ASC), ‘attr’ => SORT_DESC), array(‘attr’ => ‘strlen’), ‘www’);
*
* @param array $array
* @param string|array $columns
* @param string|array $callbacks
* @param null $defaultValueIfNotSetValue If value not set — use $defaultValueIfNotSetValue (any cols)
* @param bool $preserveKeys If false numeric keys will be re-indexed. If true — preserve.
* @throws \Bitrix\Main\ArgumentOutOfRangeException
*/
а дальше — ипитесь как хотите)
Источник
Сортировка по цене
Если кто-нибудь сталкивался, то подскажите, плиз.
Есть страница с выводом товаров торгового каталога реализованная с помощью Компонента 1.0 «Элементы раздела в табличном порядке» (section.php). Сделана сортировка по свойствам товара: высота, ширина etc.
Нужно реализовать еще сортировку по цене!
Может кто-то решал уже подобную задачу, подскажите направление для действий
Тут ведь интересная штука может получится.
Проявив доброту душевную — можешь поддержать конкурента, а такого только врагу пожелаешь. На дворе капитализм.
«У нас на фронте этому быстро учили» (с) Шарапов.
Может я для себя, для души
| Цитата |
|---|
| Всеволод Коваленко пишет: В начале шаблона вывода компонента можно добавить |
| Цитата |
|---|
| Антон Пилецкий пишет: Есть решение в топике «bitrix:catalog.section — возможна ли сортировка по цене, количеству?» |
| Цитата |
|---|
| «ELEMENT_SORT_FIELD» => «catalog_PRICE_2», где 2 — это ID типа цены. |
| Цитата |
|---|
| Евгений Малков пишет: Тот топик для клиентов. Основная мысль — для сортировке по цене, в параметре компонента указать: |
| Цитата |
|---|
| «ELEMENT_SORT_FIELD» => «catalog_PRICE_2», где 2 — это ID типа цены. |
Для типа цены с ID 2.
Для сортировки по наличию на складе catalog_QUANTITY
опишите подробней, пожалуйста. У меня почему так не сортирует.
| Цитата |
|---|
| Слава пишет: У меня почему так не сортирует. |
И так по умолчанию компонент bitrix:catalog.section умеет сортировать только по одному из полей например по цене catalog_PRICE_1 или по наличию IS_AVAILABLE однако стоит отредактировать файл компонента /bitrix/components/bitrix/catalog.section/component.php А конкретно заменить строку
Помогите, пожалуйста, разобраться с сортировкой по цене
Управление сайтом 16.5.4
Как я понял:
Для вывода списка товаров формируется 4 sql запроса. Сортировка определяется только первым запросом, другие запросы служат для заполнения $arResult
В компоненте catalog.section устанавливаю $arSort = array(‘catalog_PRICE_1’=>»DESC») и передаю $arSort в CIBlockElement::GetList
В запрос нормально добавляется » ORDER BY CAT_P1.PRICE desc» и .
Сортировка не отрабатывает.
Оказывается выборка идет по продукции, а не по ком. предложениям
(
INNER JOIN b_iblock_2_index FC on FC.ELEMENT_ID = BE.ID
left join b_catalog_price CAT_P1 on (CAT_P1.PRODUCT_ID = BE.ID AND CAT_P1.CATALOG_GROUP_ID = 1) and ((CAT_P1.QUANTITY_FROM = 1 OR CAT_P1.QUANTITY_TO IS NULL)
)
В таблице b_catalog_price только ком. предложения и , естественно, поле CAT_P1.PRICE остается не заполненным и соответственно сортировка не работает.
Я сделал сортировку путем изменения самого запроса, но как-то это не комильфо
Сразу пишу, что в инете я искал, но ничего не нашел, чтобы решить проблему без изменения напрямую SQL запроса.
С битрикс только начал разбираться и скорее всего что-то упустил.
Источник