Вывести разделы инфоблока по первым буквам не меняя структуру каталога. Алфавитный указатель

Просмотров: 3749

Например: у нас есть инфоблок с большим количеством разделов. И мы хотим, на сайте разбить разделы по буквам. Самый простой способ, это конечно же добавить буквы в разделы каталога, и перераспределить сами разделы по своим буквам.
Но... а если и разделов более 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

На этом все, вопросы можно задавать в комментариях.

Перетащите файлы
Ничего не найдено
Нажимая кнопку "Отправить" вы соглашаетесь
с политикой конфиденциальности и обработки персональных данных.

Блог-note: заметки разработчика

Объединить отдельные поля ФИО в одно свойство при оформлении заказа.

Пользователь, при оформлении заказа, заполняет три отдельных поля с фамилией, именем и отчеством. Нам нужно сохранить эт...

Фотогалерея на базе компонента новостей, с fancybox.

Это заметка обновление к очень старой, уже имеющейся на сайте. Сделаем что-то типа фотогалереи на базе встроеннного в би...

Открытие мобильного приложения Apache Cordova по ссылке

Достаточно часто нужно реализовывать открытие мобильного приложения по ссылке. Например: при отправке ссылки на электоро...

Очистить брошенные корзины с помощью API 1С-Битрикс

Задача: в интернет-магазине накапливается большое количество брошенных корзин, нужно их очистить. Включая и корзины заре...

Вывести список всех пользователей с необходимой информацией

Если нужно, на какой-либо странице сайта, вывести всех пользователей из группы "Зарегистирированные пользователи", прост...

Подключение мобильной версии шаблона Битрикс сайта, с автопереключением

Предпочитаю, что бы сайт не грузил кучу скриптов и стилей. При загрузке адаптивного шаблона за ним тянется очень много ф...

Базовая защита "Битрикс виртуальная машина" от DDoS атак.

Данный способ защиты не панацея, и скорее всего не спасет от профессиональной DDoS атаки, когда ваш сервер на CentOS под...

Сортировать товары по названию, цене и свойствам в каталоге 1С-Битрикс

Задача: реализовать возможность сортировки товаров в разделах каталога. Сортировка должна работать с использованием AJAX...

Получить и вывести все цены товара в 1С-Битрикс

Задача: получить и вывести все цены товара по его ID в каталоге 1С-Битрикс (например, в детальной карточке catalog.e...