Как лучше в 1с Битрикс на странице читаемой новости вывести список других новостей из категории к которой относится читаемая новость?

Ссылка скопирована
1 ответ

По вводным: подскажите, как в 1с Битрикс на странице читаемой новости вывести другие новости этой же категории к которой относится читаемая новость. Я голову ломаю над этой задачей уже второй вечер. Я использую компонент bitrx.news

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Mobile-редакция Ответ

В 1С-Битрикс на странице детальной новости список других новостей из той же категории можно вывести через компонент news.list, передав ему фильтр по разделу текущей новости и исключив текущий элемент. Не нужно писать SQL напрямую: используйте стандартный фильтр компонента или API инфоблоков.

На детальной странице обычно известны IBLOCK_ID, IBLOCK_SECTION_ID и ID текущей новости. В шаблоне детальной новости можно задать глобальный фильтр:

global $sameSectionFilter;
$sameSectionFilter = array(
    'IBLOCK_ID' => $arResult['IBLOCK_ID'],
    'SECTION_ID' => $arResult['IBLOCK_SECTION_ID'],
    '!ID' => $arResult['ID'],
    'ACTIVE' => 'Y',
);

global $sameSectionFilter; $sameSectionFilter = array( 'IBLOCK_ID' => $arResult['IBLOCK_ID'], 'SECTION_ID' => $arResult['IBLOCK_SECTION_ID'], '!ID' => $arResult['ID'], 'ACTIVE' => 'Y', );

Затем подключить bitrix:news.list:

$APPLICATION->IncludeComponent(
    'bitrix:news.list',
    'related_news',
    array(
        'IBLOCK_ID' => $arResult['IBLOCK_ID'],
        'NEWS_COUNT' => 4,
        'FILTER_NAME' => 'sameSectionFilter',
        'PARENT_SECTION' => $arResult['IBLOCK_SECTION_ID'],
        'INCLUDE_SUBSECTIONS' => 'Y',
        'CACHE_TYPE' => 'A',
        'CACHE_TIME' => 36000000,
    )
);

$APPLICATION->IncludeComponent( 'bitrix:news.list', 'related_news', array( 'IBLOCK_ID' => $arResult['IBLOCK_ID'], 'NEWS_COUNT' => 4, 'FILTER_NAME' => 'sameSectionFilter', 'PARENT_SECTION' => $arResult['IBLOCK_SECTION_ID'], 'INCLUDE_SUBSECTIONS' => 'Y', 'CACHE_TYPE' => 'A', 'CACHE_TIME' => 36000000, ) );

Если новость может быть без раздела, предусмотрите fallback: последние новости инфоблока или новости по тегам. Если у элемента несколько разделов, нужно решить, какой считать основным.

Обязательно проверьте кэш. Если фильтр зависит от текущей новости, параметры должны попадать в кэш-ключ компонента. Иначе на разных детальных страницах может выводиться один и тот же список.

Итог: берите раздел текущей новости, исключайте текущий ID и выводите news.list с фильтром. Это безопаснее и поддерживаемее, чем ручная выборка в шаблоне без кэша.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно