Бывает, что нужно перед списком элементов вывести строку для сортировку, примерно такую: "Сортировать по: цене, названию, артикулу"
С комплексным компонентом это немного проще с точки зрения управления сортировкой - её параметры можно вывести в общие настройки компонента и будет вполне приемлемый вариант. А вот с обычным компонентом ситуация осложняется тем, что параметры сортировки придется передавать в настройки компонента в «чистом виде».
Итак первое предложение - кустарное решение (буду крайне признателен, если в комментариях предложите лучшее): На странице с компонентом в первый блок дописываем примерно такой код http://bxapi.ru/code/wLpXJsfNjf3cRKo/:
Как видно, решение не учитывает направление сортировки. Это только добавит новые проверки, но сути не меняет - работать с этим неудобно.
Если бы компонент мог принимать внешний массив параметров сортировки, как это происходит с массивом для фильтрации, то по моему мнению, было бы намного проще. Тогда можно было бы перед элементами раздела вывести компонент сортировки (подобно умному фильтру), который бы генерировал нужный массив для сортировки.
Поэтому второе моё предложение - проголосовать за идею доработки штатного компонента «Элементы раздела» вот здесь: http://idea.1c-bitrix.ru/13447/
Для того что бы реализовать такую логику нужно всего несколько строк кода в стандартном компоненте, при этом сохраняется обратная совместимость.
Так что голосуйте, комментируйте и даже критика приветствуется
Гринкевич Дмитрий, во-первых, сейчас можно передать только два направления сортировки. Во-вторых, для передачи двух параметров сортировки нужно указать 4 параметра компонента.
Предположим, что у нас есть компонент, который выводит строку "Сортировать по: цене, артикулу, названию", сам генерирует ссылки, подсвечивает активный пункт и т.п., но что бы передать выставленные в нем параметры сортировки в компонент "Элементы раздела" придется вручную сначала задать названия 4ёх глобальных переменных в настройках компонента сортировки, запомнить их и опять же вручную прописать эти 4 переменные в настройках компонента "Элементы раздела". Примитивно, но на практике не так уж и просто.
Ну а вообще, я считаю, что в этом компоненте, должна быть возможно переопределять/дополнять (array_merge()) все параметры метода CIBlockElement::GetList. На рядового пользователя сайта это не повлияет, а разработчику больше свободы и меньше необходимости кастомизировать компонент.
Что-то не вижу особой разницы, передавать в компонент $sort и $order либо просто "sort" и "order", а в компоненте извлекать ${"sort"} и ${"order"} ? Чем это облегчит жизнь? А блок "Сортировать по" можно выводить в шаблоне catalog.section. $GLOBALS['sort'] и $GLOBALS['order'] можно и сейчас формировать в каком-нибудь компоненте по аналогии с фильтром.
Ну главное принцип, а где один там и две, можно хоть 10 полей и направлений сортировок сделать, это уже не имеет значения.
Для универсальности передавать в параметры компонента вот эту переменную, то что у вас в коде $arSortVars - то есть список возможных сортировок элементов. Генерировать его в компоненте который над catalog.section а потом передавать как параметр в catalog.section как-нибудь так: "AVAILABLE_SORT" => $GLOBALS['arSortVars']; чтобы в шаблоне catalog.section формировать строку "Сортировать по:" foreach ($arParams['AVAILABLE_SORT'] as $sortType) { $className = $arParams["ELEMENT_SORT_FIELD"] == $sortType['SORT'] ? ' active ' : ''; ...
Семеритов Александр написал: Ну главное принцип, а где один там и две, можно хоть 10 полей и направлений сортировок сделать, это уже не имеет значения.
К сожалению имеет. Если посмотреть исходный код компонента - больше чем по двум полям он в нынешнем состоянии сортировать не будет.
Сам компонент да, раньше и двух не было, только 1 было. Я о том, что подготовить параметры для компонента какие угодно можно и сколько угодно по своим правилам. Например
Бывает, что нужно перед списком элементов вывести строку для сортировку, примерно такую: "Сортировать по: цене, названию, артикулу"
С комплексным компонентом это немного проще с точки зрения управления сортировкой - её параметры можно вывести в общие настройки компонента и будет вполне приемлемый вариант. А вот с обычным компонентом ситуация осложняется тем, что параметры сортировки придется передавать в настройки компонента в «чистом виде».
ни разу не возникало проблем при решении такой задачи. У нас есть свой собственный компонент - панель сортировки, который ставится перед типовым catalog.section и передает ему все данные по сортировке, которые обрабатывает лично.
Приведенные вами строки вы можете с успехом использовать и вне компонента.
Пока в посте не увидел важности включения моментов управления сортировкой в код компонента. Мне кажется, что в настоящий момент компонент вполне самодостаточен и универсален и затачивать его под частные случаи не стоит.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».