Сортировка в битрикс
Есть сайт, на нём раздел с каталогом товаров, у товаров (элементов инфоблока) есть свойство PRICE (их цена), сейчас при открытии каталога товары выводятся не упорядочено, а мне нужно, чтобы они выводились по возрастанию цены.
Вот код странички, на которую добавлен компонент:
<?
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php");
$APPLICATION->SetTitle("Каталог");
?>
<div class="main">
<? $APPLICATION->IncludeComponent("bitrix:news",
"catalog", array(
"ADD_ELEMENT_CHAIN" => "N",
"ADD_SECTIONS_CHAIN" => "Y",
"AJAX_MODE" => "N",
"AJAX_OPTION_ADDITIONAL" => "",
"AJAX_OPTION_HISTORY" => "N",
"AJAX_OPTION_JUMP" => "N",
"AJAX_OPTION_STYLE" => "Y",
"BROWSER_TITLE" => "-",
"CACHE_FILTER" => "N",
"CACHE_GROUPS" => "Y",
"CACHE_TIME" => "36000000",
"CACHE_TYPE" => "A",
"CHECK_DATES" => "Y",
"COMPONENT_TEMPLATE" => "catalog",
"DETAIL_ACTIVE_DATE_FORMAT" => "d.m.Y",
"DETAIL_DISPLAY_BOTTOM_PAGER" => "Y",
"DETAIL_DISPLAY_TOP_PAGER" => "N",
"DETAIL_FIELD_CODE" => array(
0 => "",
1 => "",
2 => "",
3 => "",
),
"DETAIL_PAGER_SHOW_ALL" => "Y",
"DETAIL_PAGER_TEMPLATE" => "",
"DETAIL_PAGER_TITLE" => "Страница",
"DETAIL_PROPERTY_CODE" => array(
0 => "DESCRIPTION",
1 => "PRICE",
2 => "VALUTA",
3 => "SALE",
),
"DETAIL_SET_CANONICAL_URL" => "N",
"DISPLAY_BOTTOM_PAGER" => "Y",
"DISPLAY_DATE" => "Y",
"DISPLAY_NAME" => "Y",
"DISPLAY_PICTURE" => "Y",
"DISPLAY_PREVIEW_TEXT" => "Y",
"DISPLAY_TOP_PAGER" => "N",
"HIDE_LINK_WHEN_NO_DETAIL" => "N",
"IBLOCK_ID" => "6",
"IBLOCK_TYPE" => "catalog",
"ELEMENT_SORT_FIELD" => "property_PRICE",
"ELEMENT_SORT_ORDER" => "desc",
"INCLUDE_IBLOCK_INTO_CHAIN" => "Y",
"LIST_ACTIVE_DATE_FORMAT" => "d.m.Y",
"LIST_FIELD_CODE" => array(
0 => "",
1 => "",
2 => "",
3 => "",
),
"LIST_PROPERTY_CODE" => array(
0 => "DESCRIPTION",
1 => "PRICE",
2 => "VALUTA",
3 => "SALE",
),
"MESSAGE_404" => "",
"META_DESCRIPTION" => "-",
"META_KEYWORDS" => "-",
"NEWS_COUNT" => "100",
"PAGER_BASE_LINK_ENABLE" => "N",
"PAGER_DESC_NUMBERING" => "N",
"PAGER_DESC_NUMBERING_CACHE_TIME" => "36000",
"PAGER_SHOW_ALL" => "N",
"PAGER_SHOW_ALWAYS" => "N",
"PAGER_TEMPLATE" => ".default",
"PAGER_TITLE" => "Новости",
"PREVIEW_TRUNCATE_LEN" => "",
"SEF_FOLDER" => "/katalog/",
"SEF_MODE" => "Y",
"SET_LAST_MODIFIED" => "N",
"SET_STATUS_404" => "N",
"SET_TITLE" => "Y",
"SHOW_404" => "N",
"STRICT_SECTION_CHECK" => "N",
"USE_CATEGORIES" => "N",
"USE_FILTER" => "N",
"USE_PERMISSIONS" => "N",
"USE_RATING" => "N",
"USE_REVIEW" => "N",
"USE_RSS" => "N",
"USE_SEARCH" => "N",
"USE_SHARE" => "N",
"SEF_URL_TEMPLATES" => array(
"news" => "",
"section" => "",
"detail" => "#ELEMENT_ID#/",
)
),
false,
array(
"ACTIVE_COMPONENT" => "Y"
)
); ?>
</div><? require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/footer.php"); ?>
А вот код самого компонента, который обрабатывает данные и выводит их на страницу:
<?php
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
CModule::IncludeModule('iblock');
if ($_POST["id"]) {
$sec_id = $_POST["id"];
$arSelect = array("ID", "NAME", "PREVIEW_PICTURE", "PROPERTY_DESCRIPTION", "PROPERTY_PRICE", "DETAIL_TEXT", "PROPERTY_VALUTA");
$arFilter = array("IBLOCK_ID" => 6, "IBLOCK_SECTION_ID" => $sec_id, "ACTIVE_DATE" => "Y", "ACTIVE" => "Y" );
$res = CIBlockElement::GetList(array(), $arFilter, false, array("nPageSize" => 50), $arSelect);
// Подгружаем данные с ЦБ РФ
$daily_currency = simplexml_load_file('http://www.cbr.ru/scripts/XML_daily.asp');
$valutes = $daily_currency->Valute;
while ($ob = $res->GetNextElement()) {
$arFields = $ob->GetFields();
$price = $arFields["PROPERTY_PRICE_VALUE"];
$pic = CFile::GetPath($arFields["PREVIEW_PICTURE"]);
if ($arFields["PROPERTY_VALUTA_VALUE"]) {
// Приводим цену к формату 9999.9999
$price = str_replace(',', '.', $price);
$price = preg_replace('/[^.0-9]+/', '', $price);
// Цикл поиска нужной валюты по её коду (берется из базы)
foreach ($valutes as $value) {
if (strcasecmp($value->CharCode, $arFields["PROPERTY_VALUTA_VALUE"]) != 0) continue;
// Приводим данные к числовому значению
$v = doubleval(str_replace(',', '.', $value->Value));
$n = intval($value->Nominal, 10);
// Считаем цену
$price = ($price * 0.95) * $v / $n;
break;
}
}
echo htmlspecialchars('<div class="catalog__item" id="', ENT_HTML5) . $arFields["ID"] . htmlspecialchars('">', ENT_HTML5);
echo htmlspecialchars('<div class="catalog-good chemitry-good">', ENT_HTML5);
echo htmlspecialchars('<div class="catalog-good__image" style="background-image: url(', ENT_HTML5) . $pic . htmlspecialchars(')"></div>', ENT_HTML5);
echo htmlspecialchars('<div class="catalog-good__about">');
echo htmlspecialchars('<div class="catalog-good__info">');
echo htmlspecialchars('<div class="catalog-good__title chemistry-good__title">', ENT_HTML5) . $arFields["NAME"] . htmlspecialchars('</div>', ENT_HTML5);
echo htmlspecialchars('<div class="chemistry-good__text">', ENT_HTML5);
echo str_ireplace(",", "<br>", $arFields["PROPERTY_DESCRIPTION_VALUE"]);
echo htmlspecialchars('</div>', ENT_HTML5);
echo htmlspecialchars('<div class="chemistry-good__price">', ENT_HTML5);
// Если указана валюта, выводим цену в формате 9 999,99
// Если не указана, просто выводим
if ($arFields["PROPERTY_VALUTA_VALUE"]) {
echo htmlspecialchars('Цена: ', ENT_HTML5) . number_format($price, 2, ',', ' ') . htmlspecialchars(' руб.', ENT_HTML5);
} else {
echo htmlspecialchars('Цена: ', ENT_HTML5) . $price;
}
Ответы (1 шт):
Автор решения: Evgeniy Kuznetsov
→ Ссылка
Вместо этого:
$res = CIBlockElement::GetList(array(), $arFilter, false, array("nPageSize" => 50), $arSelect);
Добавьте это:
$res = CIBlockElement::GetList($arParams["SORT"], $arFilter, false, array("nPageSize" => 50), $arSelect);
И при вызове компонента добавьте параметр SORT:
$APPLICATION->IncludeComponent("bitrix:news",
"catalog", array(
"SORT" => ["PROPERTY_PRICE"=>"ASC"]
...
