Меню
Здравствуйте, подскажите пожалуйста.
В catalog.section.top в файле result_modifier.php есть код
Код
$elementId = $GLOBALS['current_news_id']; // ID элемента, к которому проверяем привязку

// ID инфоблока, к которому принадлежит элемент
$iblockId = 41;

// Получаем элементы из инфоблока, которые имеют привязку к элементу с указанным ID
$res = CIBlockElement::GetList(
   [],
   [
      'IBLOCK_ID' => $iblockId,
      'PROPERTY_SHOW_WHERE' => $elementId,
   ],
   false,
   false,
   ['ID'],
);

// Инициализируем массив для хранения ID привязанных элементов
$linkedElementIds = [];
if ($res->SelectedRowsCount() > 0) {
   while ($item = $res->Fetch()) {
      $linkedElementIds[] = $item['ID']; // Добавляем ID в массив
   }
}


$arResult['LINKED_ITEMS'] = $linkedElementIds;
Мы ищем в инфоблоке 41 элементы, у которых есть привязка к текущему элементу и выводим их в текущем элементе.
Но результат кешируется (в result_modifier.php же не должен)
В итоге есть две страницы, к ним привязаны разные элементы, но результат они показывают один и тот же.
Пока не сделать сброс кеша ?clear_cache=Y
Тогда результат обновляется, но опять на все страницы, показывает один результат, той, на которой мы сбросили кеш.

<?=// Выводим массив ID
print_r($arResult['LINKED_ITEMS']);
?>
На странице 1 есть ID 15 и 20
На странице 2 есть ID 30 и 45

Если мы на странице 1 сбросим кеш ?clear_cache=Y, то у нас и на второй будут ID 15 и 20, пока не сбросим кеш на второй странице.

Подскажите как решить можно проблему?

Заранее спасибо.
В result_modifier кеш работает. Но у вас скорее всего не в нем проблема, а в том что кешируется template.php

Попробуйте перенести этот участок (который выводит связанные элементы) в component_epilog.php - как раз в нем кеширование и не работает.
Пробовал, через него вообще ничего не выводится. Даже если у catalog.section.top отключить кэш - пустота.
Если отключить кэш в админке, тоже пусто
Как-то я не внимально прочитал первое сообщение. То есть у вас именно catalog.section.top выводит элементы и внутри карточек нужно вывести элементы связанные с ними?
Скиньте скрин (из дизайна) как это вообще должно выглядеть - для понимания
Блок такой. За вывод отвечает catalog.sections.top внутри news.detail
Этот блок создается в инфоблоке ID 41, там же у элементов, разбитым по разделам делается привязка к инфоблоку ID 1 и уже находясь в элементе из инфоблока ID 1, надо вывести элементы из ID 41, у которых есть привязка к тому, на котором мы находимся.

Т.е. по моей логике в данном случае, мы определяем ID текущего элемента, ищем есть ли у элементов из инфоблока 41 эти ID и выводим.


Сейчас я решил проблему другим способом, но честно хотелось бы узнать, почему с кешем так получается
извиняюсь, в редактор изображение вставилось, но в сообщении поломалось
Потому что нельзя вставлять компоненты с кешированием внутрь шаблона другого компонента с кешированием. Там не предсказуемые проблемы возникают.
Подобное, все таки надо делать через component_epilog, под типа так:
Код
result_modifier
$res = CIBlockElement::GetList(
   [],
   [
      'IBLOCK_ID' => 41,
      'PROPERTY_SHOW_WHERE' => $arResult['ID'],
   ],
   false,
   false,
   ['ID'],
);
$arResult['LINKED_ITEMS'] = [];
while($ob = $res->Fetch())
{
   $arResult['LINKED_ITEMS'][] = $ob['ID']
}


Код
component_epilog
if (count($arResult['LINKED_ITEMS']) > 0) {
   $GLOBALS['arrFilter'] = array('ID' => $arResult['LINKED_ITEMS']);
     $APPLICATION->IncludeComponent(
        "bitrix:catalog.section.top",
        "",
        array(
            .....
            "FILTER_NAME" => "arrFilter",
            .....
        ),
        false
    );
}

Как-то так, но написал не проверяя.
Видеоуроки по
1С-Битрикс
на моем Boosty канале Видео
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить картинки
 

Блог-note: заметки разработчика

Правильное подключение стилей и скриптов в Битрикс

Есть несколько способов подключения файлов стилей и скриптов, при верстке шаблонов в системе управления 1С-Битрикс. Если...

Как вывести свойства инфоблока по отдельности и немного плюшек не в тему

Если у инфоблока несколько свойств- то при выводе их всех, скажем в детальном описании новости, они выводятся все вместе...

Ленивая подгрузка картинок в компоненте, на vue js Битрикс

Если на одну страницу сайта выводится большое количество картинок, которые могут долго подгружаться- либо нужно попасть ...

Вывод элементов с помощью API битрикс

Иногда, выводить элементы инфоблока с помощью компонентов, может оказаться избыточным. Например, если нужно вывести элем...

Глобальные фильтры на всякие случаи жизни

Глобальный фильтр, нужен чаще всего, для вывода определенных элементов, из общего массива, инфорблока. Спектр применяем...

Создание агента в 1С-Битрикс, на реальном примере

Задача: Каждый час нужно обновлять свойство элементов/товаров с типом строка "В наличии", вписывать в него либ...

Сниппеты типографики bootstrap, для Битрикс

Если вы подключили bootstrap к своему сайту, или сверстали весь шаблон, подключив bootstrap из ядра битрикс. Имеет смысл...

Вывести разделы инфоблока в которых находится элемент Битрикс

Если нужно в карточке товара или новости, вывести структуру разделов в котором находится элемент. С одной стороны, это у...

Установка Битрикс24 "Интернет-Магазин + CRM" на один домен и настройка работы почты.

Задача: установить лицензию "Интернет-Магазин + CRM" на один домен. Что бы crm была доступна по адресу crm...