+7 (987) 026-06-36
Написать в Telegram

Оставить заявку
stanislav_web

Вывести все элементы и их первые буквы, отсортировать по алфавиту, вначале русские буквы, потом английские и фильтровать с помощью CIBlockElement::GetList в 1С-Битрикс

Вывести все элементы и их первые буквы, отсортировать по алфавиту, вначале русские буквы, потом английские и фильтровать с помощью CIBlockElement::GetList в 1С-Битрикс Объясняю и показываю примеры решений разных задач с которыми сталкивался и сталкиваюсь в процессе работы

Вывести все элементы и их первые буквы, отсортировать по алфавиту, вначале русские буквы, потом английские и фильтровать с помощью CIBlockElement::GetList в 1С-Битрикс

Объясняю и показываю примеры решений разных задач с которыми сталкивался и сталкиваюсь в процессе работы

📅 27 октября 2023

👁‍🗨 111

🔥 0

Вывести все элементы и их первые буквы, отсортировать по алфавиту, вначале русские буквы, потом английские и фильтровать с помощью CIBlockElement::GetList в 1С-Битрикс
В 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>