то ждем ваше обращение в нашей службе тех поддержки.
Сортировка в компонентах news.list и catalog.section
Для выполнения сортировки в компоненте news.list или catalog.section компоненту необходимо передать параметры ELEMENT_SORT_FIELD и ELEMENT_SORT_ORDER.
Сортировку можно произвести по стандартным полям, для чего можно воспользоваться приведенным ниже списком:
- id - ID элемента;
- sort - индекс сортировки;
- timestamp_x - дата изменения;
- name - название;
- active_from или date_active_from - начало периода действия элемента;
- active_to или date_active_to - окончание периода действия элемента;
- status - код статуса элемента в документообороте;
- code - мнемонический код элемента;
- iblock_id - числовой код информационного блока;
- modified_by - код последнего изменившего пользователя;
- active - признак активности элемента;
- show_counter - количество показов элемента (учитывается функцией CIBlockElement::CounterInc);
- show_counter_start - время первого показа элемента (учитывается функцией CIBlockElement::CounterInc);
- shows - усредненное количество показов (количество показов / продолжительность показа);
- rand - случайный порядок;
- xml_id или external_id - внешний код;
- tags - теги;
- created - время создания;
- created_date - дата создания без учета времени;
- cnt - количество элементов (только при заданной группировке).
Также сортировать можно по созданным вами свойствам элемента информационного блока:
- property_<PROPERTY_CODE> - по значению свойства с числовым или мнемоническим кодом PROPERTY_CODE (например, PROPERTY_123 или PROPERTY_NEWS_SOURCE).
- propertysort_<PROPERTY_CODE> - по индексу сортировки варианта значения свойства. Только для свойств типа Список.
- catalog_<CATALOG_FIELD>_<PRICE_TYPE> - по полю CATALOG_FIELD (может быть PRICE - цена или CURRENCY - валюта) из цены с типом PRICE_TYPE (например, catalog_PRICE_1 или CATALOG_CURRENCY_3). Сортировка должна иметь формат: CATALOG_(PRICE или CURRENCY)_ID-типа-цены.
- catalog_QUANTITY - сортировка по количеству.
-
PROPERTY_<PROPERTY_CODE>.<FIELD> - по значению поля элемента указанного в качестве привязки. PROPERTY_CODE - мнемонический или символьный код свойства типа привязка к элементам. FIELD может принимать значения:
- ID
- TIMESTAMP_X
- MODIFIED_BY
- CREATED
- CREATED_DATE
- CREATED_BY
- IBLOCK_ID
- ACTIVE
- ACTIVE_FROM
- ACTIVE_TO
- SORT
- NAME
- SHOW_COUNTER
- SHOW_COUNTER_START
- CODE
- TAGS
- XML_ID
- STATUS
- PROPERTY_<PROPERTY_CODE>.PROPERTY_<PROPERTY_CODE2> - по значению свойства элемента указанного в качестве привязки. PROPERTY_CODE - мнемонический или символьный код свойства типа привязки к элементам. PROPERTY_CODE2 - код свойства связанных элементов.
- HAS_PREVIEW_PICTURE и HAS_DETAIL_PICTURE - сортировка по наличию и отсутствию картинок.
Тип сортировки указывается в соответствии со списком:
- asc - по возрастанию;
- nulls,asc - по возрастанию с пустыми значениями в начале выборки;
- asc,nulls - по возрастанию с пустыми значениями в конце выборки;
- desc - по убыванию;
- nulls,desc - по убыванию с пустыми значениями в начале выборки;
- desc,nulls - по убыванию с пустыми значениями в конце выборки.
Самый простой способ передать новые параметры для сортировки в компонент - это использовать $_GET запрос и передать соответствующие переменные.
Также можно воспользоваться $_SESSION и записать переменные в массив переменных сессии. Предположим нам необходимо сделать ссылки или кнопки(название, цена, лидер продаж, дата поступления) для сортировки товаров в разделе каталога (используем комплексный компонент catalog). После того как мы скопировали шаблон, необходимо открыть файл section.php и внести в него следующие модификации перед подключением компонента bitrix:catalog.section:
<?if (
isset($_GET["sort"]) && isset($_GET["method"]) && (
$_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"];
}?>
Этот код необходим для изменения параметров сортировки в компоненте. Далее откроем файл template.php компонента catalog.section и добавим ссылки управления сортировками:
<p class="sort">Сортировка:
<a <?if ($_GET["sort"] == "name"):?> class="active" <?endif;?>
href="<?=$arResult["SECTION_PAGE_URL"]?>?sort=name&method=asc">название</a>
<a <?if ($_GET["sort"] == "catalog_PRICE_3"):?> class="active" <?endif;?>
href="<?=$arResult["SECTION_PAGE_URL"]?>?sort=catalog_PRICE_3&method=asc">цена</a>
<a <?if ($_GET["sort"] == "property_PRODUCT_TYPE"):?> class="active" <?endif;?>
href="<?=$arResult["SECTION_PAGE_URL"]?>?sort=property_PRODUCT_TYPE&method=desc">лидер продаж</a>
<a <?if ($_GET["sort"] == "timestamp_x"):?> class="active" <?endif;?>
href="<?=$arResult["SECTION_PAGE_URL"]?>?sort=timestamp_x&method=desc">дата поступления</a>
</p>
Данную сортировку можно выполнить без перезагрузки страницы с использованием jQuery либо JS-библиотеки Bitrix Framework.
В случае использования отдельного компонента catalog.section или news.list необходимо четко понимать, что редактировать
сортировку данных в компоненте
через визуальный редактор будет нельзя.
Перед вызовом компонента разместить код:
<?
$sortField = 'ID'; // поле сортировки по умолчанию
$sortOrder = 'ASC'; // направление сортировки по умолчанию
if (
isset($_GET["sort"]) && isset($_GET["method"]) && (
$_GET["sort"] == "name" ||
$_GET["sort"] == "catalog_PRICE_3" ||
$_GET["sort"] == "property_PRODUCT_TYPE" ||
$_GET["sort"] == "timestamp_x")){
$sortField = $_GET["sort"];
$sortOrder = $_GET["method"];
}
?>
<?$APPLICATION->IncludeComponent(
"bitrix:catalog.section",
"",
array(
... // остальные настройки компонента
"ELEMENT_SORT_FIELD" => $sortField,
"ELEMENT_SORT_ORDER" => $sortOrder,
... // еще настройки компонента
);
);?>
Назад в раздел
Наверх