Как можно улучшить код для главной страницы, чтобы выводить несколько слайдеров из одного инфоблока с фильтрами по разделам, используя компонент `bitrix:news.list` и Slick Slider?
1. Для добавления идентификатора раздела к компоненту списка новостей в Bitrix необходимо отредактировать шаблон компонента. Для этого можно добавить следующий код в файл шаблона компонента `component_epilog.php`: ```php <?php if ($arParams['IBLOCK_ID'] && $arResult['IBLOCK_SECTION_ID']) { $APPLICATION->SetPageProperty('section_id', $arResult['IBLOCK_SECTION_ID']); } ?> ``` Затем в шаблоне компонента, где выводится список новостей, можно использовать идентификатор раздела через `#SECTION_ID#`. 2. Для улучшения кода главной страницы и вывода нескольких слайдеров из одного инфоблока с фильтрами по разделам можно сделать следующее: ```php <?php $arFilter = array('IBLOCK_ID' => <ID инфоблока>, 'ACTIVE' => 'Y', 'SECTION_ID' => <ID раздела>); $arSelect = array('ID', 'NAME', 'DETAIL_PAGE_URL', 'PREVIEW_PICTURE'); $res = CIBlockElement::GetList(array('SORT' => 'ASC'), $arFilter, false, false, $arSelect); while ($ob = $res->GetNextElement()) { $arFields = $ob->GetFields(); // Здесь можно формировать HTML для слайдера с данными новости из $arFields } ?> ``` Затем в шаблоне компонента `bitrix:news.list` можно вставить HTML для слайдера и вывести его содержимое. Для этого можно использовать библиотеку Slick Slider для создания красивого слайдера с новостными блоками.
id действительно не должен повторяться на странице, это ошибка и в плане валидации страницы и в плане логики работы скриптов, поскольку они привязываются к id.
В параметры компонента добавьте ID секции:
$GLOBALS['arrFilter']=array("SECTION_ID" => 114); $APPLICATION->IncludeComponent( "bitrix:news.list", "sliders_tab", array( "ACTIVE_DATE_FORMAT" => "d.m.Y", "ADD_SECTIONS_CHAIN" => "Y", "CUSTOM_SECTION_ID" => 114 ....
а в шаблоне компонента выводите
<?php $custom_section_id = ''; if (isset($arParams['CUSTOM_SECTION_ID'])) { $custom_section_id = $arParams['CUSTOM_SECTION_ID']; } ?> <div id="slider-tabs__id<?php echo $custom_section_id; ?>" class="slider-tabs">
1. Зачем несколько компонентов когда можно использовать 1 и уже в шаблоне разделять на нужные массивы
2. Может я ошибаюсь, в основном использую компоненты каталога, а не новостей, но разве в arResult нет ключа IBLOCK_SECTION_ID, зачем дополнительный параметр заводить?
Соответсвенно :
<? $GLOBALS['arrFilter']=array("SECTION_ID" => [117,116,114]); //перечисляем все нужные разделы $APPLICATION->IncludeComponent(//используем только 1 компонент "bitrix:news.list", "sliders_tab", array( "ACTIVE_DATE_FORMAT" => "d.m.Y", "ADD_SECTIONS_CHAIN" => "Y", .... ?>
а в шаблоне делаем нужное количество массивов
$newArr=[]; foreach($arResult["ITEMS"] as $arItem){ $newArr[$arItem['IBLOCK_SECTION_ID']][]=$arItem; } //далее по новому массиву формируем ваши блоки foreach(;newArr as $idSect=>$arEl){ ?> <div id="slider-tabs__<?=$idSect?>" class="slider-tabs"> <? }