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

Как можно улучшить код для главной страницы, чтобы выводить несколько слайдеров из одного инфоблока с фильтрами по разделам, используя компонент `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. <br/> В параметры компонента добавьте ID секции: <br/> <pre><code>$GLOBALS['arrFilter']=array("SECTION_ID" =&gt; 114);
$APPLICATION-&gt;IncludeComponent(
"bitrix:news.list", 
"sliders_tab", 
	array(
		"ACTIVE_DATE_FORMAT" =&gt; "d.m.Y",
		"ADD_SECTIONS_CHAIN" =&gt; "Y",
                "CUSTOM_SECTION_ID" =&gt; 114
....</code></pre> <br/> <br/> а в шаблоне компонента выводите <br/> <pre><code>&lt;?php
$custom_section_id = '';
if (isset($arParams['CUSTOM_SECTION_ID']))
{
$custom_section_id = $arParams['CUSTOM_SECTION_ID'];
}     
?&gt;
&lt;div id="slider-tabs__id&lt;?php echo $custom_section_id; ?&gt;" class="slider-tabs"&gt;</code></pre>
1. Зачем несколько компонентов когда можно использовать 1 и уже в шаблоне разделять на нужные массивы <br/> 2. Может я ошибаюсь, в основном использую компоненты каталога, а не новостей, но разве в arResult нет ключа IBLOCK_SECTION_ID, зачем дополнительный параметр заводить? <br/> <br/> Соответсвенно : <br/> <pre><code class="php">&lt;?
$GLOBALS['arrFilter']=array("SECTION_ID" =&gt; [117,116,114]); //перечисляем все нужные разделы
$APPLICATION-&gt;IncludeComponent(//используем только 1 компонент
"bitrix:news.list", 
"sliders_tab", 
	array(
		"ACTIVE_DATE_FORMAT" =&gt; "d.m.Y",
		"ADD_SECTIONS_CHAIN" =&gt; "Y",
....
?&gt;</code></pre> <br/> <br/> а в шаблоне  делаем нужное количество массивов <br/> <pre><code class="php">$newArr=[];
foreach($arResult["ITEMS"] as $arItem){
$newArr[$arItem['IBLOCK_SECTION_ID']][]=$arItem;
}

//далее по новому массиву формируем ваши блоки
foreach(;newArr as $idSect=&gt;$arEl){
?&gt;
&lt;div id="slider-tabs__&lt;?=$idSect?&gt;" class="slider-tabs"&gt;
&lt;?
}</code></pre>
Похожие вопросы