Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Каталог и постраничная навигация по разделам.

00 голосов
6
День добрый.
Имеем на странице комплексный компонент каталога.
В него входит компонент - структура разделов. - которая выводит древовидную структуру папок.

Из настроек комплексного компонента каталога все знают, что есть настраиваемый параметр "Количество элементов на странице:"
Однако нету никаких настроек для определения кол-ва вывода разделов.
Ну в принципе в чем проблема - модифицируешь данные или вообще своим запросом заменяешь - для ограничения кол-ва показа разделов на одной странице сайта.
Случилось так что у меня разделов первого уровня 672 штуки. новый раздел появляется примерно 2 раза в неделю.
672 элемента в столбик - это не Айс. особенно если название примерно "172(3184)".
Дописал свою навигацию вывожу по 40 элементов в 2 столбика. Все было красиво пока не включили автокеширование.
После того как включили - ссылки меняются - контент неизменен. уменьшил на сколько мог время кеширования - результата не добился. Вообще отключить кеш не могу ибо сайт газеты - материалов >16 тыс. и в день публикуется еще порядка 30-50.

Вопросы:
1. как в самописной навигации используя
Код
   echo  $sql_section->NavPrint("Номера газет", false, "", '/script/navprint.php');


чистить кеш, чтобы в неавторизованном виде - при использовании навигации в кастомизированном шаблоне (у которого включен кеш) - он отрабатывал верно?

Если вот это не подходит по причине написанной в документации.
Код
clear_cache=Y
Только для пользователей авторизованных с административными правами.


2. когда в комплексный компонент каталога включат параметры для настройки:
a) Вывода кол-ва разделов одного уровня, на одной странице
b) Постраничную навигацию для разделов
с) Способ задания сортировки разделов - а то сейчас она идет сперва по знач. полю "сортировки", второй порядок "по названию".
спросил 15 Июнь, 13 от Grimmi (2,560 баллов)

6 Ответы

00 голосов
Цитата
Николай Санников пишет:
1. как в самописной навигации используя

Есть 2 проблемы:
- думаю лучше вам кастомизировать компонент списка секций и добавить в идентификатор кеша постраничную навигацию.
- выборка секций не имеет параметра LIMIT в sql-запросе (по крайней мере не имела).

Т.к. нет лимита, то нужно кешировать, чтобы избегать лишних запросов к БД.


Тут вот меня мысля посетила, не знаю заработает ли:
Кеш компонента зависит от параметров компонента. Т.е. !теоретически! можно добавить в шаблон компонента параметр в который устанавливать перед вызовом компонента значение страницы в постраничке по секциям. Тем самым получим кеш, зависящий от постраничной навигации по секциям каталога.
ответил 15 Июнь, 13 от Almarea (3,760 баллов)
00 голосов
в моем случаи уровень вложенности 1 он же первый. а так как нужна постраничная навигация пришлось писать свой запрос для работы с разделами вместо используемого в комплексном компоненте catalog.section.list, то есть вместо того чтобы писать свой код в данный компонент, я могу его тупо вынести за приделы вызова компонента и повесить на условие - на какой странице я сейчас нахожусь. тем самым решится проблема зависимости своей навигации от времени кеширования компонента.

Однако если уровень вложенности изменится такая схема не прокатит.

Идея интересная. надо будет ее пристальнее изучить.
Спасибо за отклик.
Интересно было бы услышать Максима Смирнова, хотя бы по вопросу 2 пункт "с" , есть в планах такое или нет
ответил 28 Июнь, 13 от Grimmi (2,560 баллов)
00 голосов
Напряг стажера - проверили, для news.list такая фишка работает. Просто в параметры вызова компонента добавляем "динамический" параметр, который и меняет нам идентификатор кеша. Т.е. можете написать постраничку в шаблоне, в параметры передавать номер страницы и будет вам кешируемое счастье.
Хороший такой костыль, позволяющий изменить идентификатор кеша без модификации ядра компонента.
ответил 02 Окт, 13 от Almarea (3,760 баллов)
00 голосов
Цитата
Николай Санников пишет:
2. когда в комплексный компонент каталога включат параметры для настройки:
a) Вывода кол-ва разделов одного уровня, на одной странице
b) Постраничную навигацию для разделов
с) Способ задания сортировки разделов - а то сейчас она идет сперва по знач. полю "сортировки", второй порядок "по названию".


a) это будет возможно только после реализации параметров постранички в CIBlockSection::GetList.
Постраничка в CIBlockSection::GetList запланирована на ближайшее время (short list).
b) см. выше
с) В компоненте catalog.section.list выводится дерево каталога. Во избежание путаницы уровней и родителей с потомками сортировка задана жестко left_margin, что эквивалентно sort+name.
Задание сортировки возможно только при выводе одного уровня ("TOP_DEPTH" => "1").
Ничего фантастического я не вижу.

PS Ваша задача решается кастомизацией шаблона комплексного компонента (в файле section.php скопированного шаблона заменить bitrix:catalog.section.list на my:catalog.section.list)
Копируем компонент catalog.section.list к "себе" в my.
В нем убить фильтр по DEPTH_LEVEL и LEFT_MARGIN с RIGHT_MARGIN, заменив на SECTION_ID
Перед GetNext() вызываем NavStart
Вторым параметром в StartResultCache подмешиваем навигацию
Код
serialize(CDBResult::GetNavParams(array("nPageSize"=>20/*или сколько там?*/)))
ответил 02 Янв, 14 от Miso (740 баллов)
00 голосов
Спасибо за информацию
ответил 19 Апр, 14 от Zverolov (100 баллов)
00 голосов
Maxim Smirnov,
сделал все так:
Цитата
Maxim Smirnov пишет:
в файле section.php скопированного шаблона заменить bitrix:catalog.section.list на my:catalog.section.list)
Копируем компонент catalog.section.list к "себе" в my.

а компонент все равно берется из bitrix:catalog.section.list
ответил 13 Авг, 14 от Elaiza (100 баллов)

Похожие вопросы

0 голосов
6 ответов
0 голосов
4 ответов
спросил 04 Сен, 13 от RoMZeS1k (330 баллов)
0 голосов
9 ответов
спросил 26 Май, 13 от Kania (5,180 баллов)