Меню
Здравствуйте, подскажите пожалуйста.
В 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: заметки разработчика

GIT-репозиторий на собственном сервере с веб-интерфейсом: Gitea - аналог GitHub

Задача: Развернуть git-репозиторий на собственном сервере с помощью Gitea — для ведения проектов, с веб-интерфейсом и по...

Использование $APPLICATION->RestartBuffer() в связке с AJAX-запросами

Часто возникает необходимость управлять выводом данных на страницу, особенно когда речь идет о взаимодействии с AJAX-за...

Добавить все свойства инфоблока в умный фильтр одним разом

Если у вас достаточно много свойств, в инфоблоке с товарами, например: больше 1000-чи, после интеграции с 1С или импорта...

Вывести артикул в печатную форму бланка заказа

Задача: в печатную форму бланка заказа добавить артикулы товаров и данные о пользователе.

Как вывести картинки к разделам на базе _ext меню

Просто для эстетической красоты, нужно вывести в меню разделов сайта картинки или иконки. Достаточно популярный метод, э...

Заполнить коэффициент единицы измерения (MEASURE_RATIO) из свойства элемента

Задача: Каталог наполняется из 1С, но 1С не передает коэффициент единицы измерения (особенность конкретной 1С, но во...

Данные о заказе текущего пользователя

Иногда нужно получить данные о заказе текущего пользователя. Не через компонент, а непосредственно через API Битрикс. Ва...

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

Задача: реализовать возможность сортировки товаров в разделах каталога. Сортировка должна работать с использованием AJAX...

Увидеть файл заказов который передаст Битрикс в 1С

Для диагностики обмена заказов, интернет-магазина на 1С Битрикс с 1С Управление Торговлей, нужно увидеть xml файл с зака...