Как можно добавить идентификатор раздела к компоненту списка новостей?

Как можно улучшить код для главной страницы, чтобы выводить несколько слайдеров из одного инфоблока с фильтрами по разделам, используя компонент `bitrix:news.list` и Slick Slider?
  • 29 июня 2024 г. 16:42
Ответы на вопрос 3
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">
<?
}
Похожие вопросы