Например: у нас есть инфоблок с большим количеством разделов. И мы хотим, на сайте разбить разделы по буквам. Самый простой способ, это конечно же добавить буквы в разделы каталога, и перераспределить сами разделы по своим буквам.
Но... а если и разделов более 2000-яч и вообще не вариант, так менять структуру инфоблока.
Получаем первые буквы названий разделов, без дубликатов
В шаблоне компонента catalog.section.list (Разделы инфоблока) удаляем все и меняем на такой код:
foreach ($arResult["SECTIONS"] as $arSectionArray) {
$sectFName = $arSectionArray['NAME'];
$sectFLetter = mb_substr($sectFName, 0, 1, 'UTF-8');
$arrayFirsletter[] = $sectFLetter;
}
$uniuqLetter = array_unique($FirstLetter);
- Прошлись циклом foreach по всем разделам инфоблока и получили первые буквы каждого названия раздела, загнали в переменную $sectFLetter
- Наполнили массив $arrayFirsletter этими, первыми буквами названий разделов.
- Так как названия разделов могут быть c одинаковой первой буквой, прогнали массив через array_unique - позволяет получить уникальные элементы массива, то есть без повторов
Таким образом, в массиве $uniuqLetter имеем только уникальные, первые буквы, всех разделов.
Алфавитный указатель по разделам Битрикс. Разделы по первой букве названия
Осталось только вывести разделы с сортировкой по первой букве названия. Что бы получилось, что-то такое- алфавитный указатель в меню:
foreach ($uniuLetter as $onlyOnceLetter) {
echo $onlyOnceLetter;
foreach ($arResult["SECTIONS"] as $arSection) {
if (mb_substr($arSection['NAME'], 0, 1) == $onlyOnceLetter) { ?>
<a href="<?= $arSection["SECTION_PAGE_URL"] ?>">
<?echo $arSection['NAME']; ?>
</a>
<?}
}
}
- Прошлись циклом foreach по нашему массиву, с уникальными буквами и вывели их пользователю $onlyOnceLetter
- Внутри, еще одним foreach-ем вывели разделы и отфильтровали их по совпадению первой буквы названия и нашей переменной $onlyOnceLetter
На этом все, вопросы можно задавать в комментариях.