Вывести все элементы и их первые буквы, отсортировать по алфавиту, вначале русские буквы, потом английские и фильтровать с помощью CIBlockElement::GetList в 1С-Битрикс
Объясняю и показываю примеры решений разных задач с которыми сталкивался и сталкиваюсь в процессе работыВывести все элементы и их первые буквы, отсортировать по алфавиту, вначале русские буквы, потом английские и фильтровать с помощью CIBlockElement::GetList в 1С-Битрикс
Объясняю и показываю примеры решений разных задач с которыми сталкивался и сталкиваюсь в процессе работы
📅 27 октября 2023
👁🗨 236
В result_modifier.php:
<?
$getElementsLetter = CIBlockElement::GetList(
['NAME' => 'ASC'],
[
'IBLOCK_ID' => $arParams['IBLOCK_ID'],
'ACTIVE' => 'Y'
],
false,
false,
[
'NAME'
]
);
while ($elementsLetter = $getElementsLetter->Fetch()) {
$arElementsLetter[] = $elementsLetter;
}
if ($arElementsLetter) {
$arResult['SEARCH_PRODUCTS'] = $arElementsLetter;
}
foreach ($arElementsLetter as $element) {
$sectFName = $element['NAME'];
$sectFLetter = mb_substr($sectFName, 0, 1, 'UTF-8');
$arrayFirstletter[] = $sectFLetter;
}
$uniuqLetter = array_unique((array)$arrayFirstletter);
if ($uniuqLetter) {
function sortLetter($a, $b) {
$sa = mb_substr($a, 0, 1, 'UTF-8');
$sb = mb_substr($b, 0, 1, 'UTF-8');
if (ord($sa) > 122 && ord($sb) > 122) {
return $a > $b ? 1 : -1;
}
if (ord($sa) > 122 || ord($sb) > 122) {
return $a < $b ? 1 : -1;
}
}
$arResult['SEARCH_PRODUCTS_UNIQUE'] = $uniuqLetter;
usort($arResult['SEARCH_PRODUCTS_UNIQUE'], 'sortLetter');
}
$getLetter = $_GET['letter'];
$getElements = CIBlockElement::GetList(
['NAME' => 'ASC'],
[
'IBLOCK_ID' => $arParams['IBLOCK_ID'],
'NAME' => $getLetter ? $getLetter . '%' : '',
'ACTIVE' => 'Y'
],
false,
false,
[
'NAME',
'DETAIL_PAGE_URL'
]
);
while ($elements = $getElements->GetNext()) {
$arElements[] = $elements;
}
if ($arElements) {
function sortName($a, $b) {
$sa = mb_substr($a['NAME'], 0, 1, 'UTF-8');
$sb = mb_substr($b['NAME'], 0, 1, 'UTF-8');
if (ord($sa) > 122 && ord($sb) > 122) {
return $a > $b ? 1 : -1;
}
if (ord($sa) > 122 || ord($sb) > 122) {
return $a < $b ? 1 : -1;
}
}
$arResult['SEARCH_PRODUCTS_RESULT'] = $arElements;
usort($arResult['SEARCH_PRODUCTS_RESULT'], 'sortName');
}
?>
В template.php:
<div class="search__alphabet element-animation">
<? foreach ($arResult['SEARCH_PRODUCTS_UNIQUE'] as $key => $letter) { ?>
<a href="?letter=<?= $letter; ?>"<?= $getLetter == $letter ? ' class="active"' : ''; ?>><?= $letter; ?></a>
<? } ?>
</div>
<ul class="search__results element-animation">
<? foreach ($arResult['SEARCH_PRODUCTS_RESULT'] as $key => $product) { ?>
<li>
<a href="<?= $product['DETAIL_PAGE_URL']; ?>"><?= $product['NAME']; ?></a>
</li>
<? } ?>
</ul>