Меню
Здравствуйте, подскажите пожалуйста.
В 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
    );
}

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

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

CRM Битрикс-24 на веб-окружении под Ubuntu 24.04, c поддержкой PUSH и многосайтовости

Задача: Так как с 30 июня 2024 года операционная система CentOS-7 полностью снята с поддержки и не будет получать обновл...

Открытие мобильного приложения Apache Cordova по ссылке

Достаточно часто нужно реализовывать открытие мобильного приложения по ссылке. Например: при отправке ссылки на электоро...

Вывести свойство привязка к Яндекс Картам в Битрикс

Часто бывает нужно вывести свойство привязка к Яндекс карте в детальном описании элемента. Например в детальной новости ...

Заполнить поля пользователя из свойства заказа, на примере ФИО

При создании заказа покупатель заполняет поле "ФИО". Необходимо скопировать эти данные в профиль пользователя (не путать...

Добавление не существующего товара в корзину и заказ, 1С-Битрикс

Задача: нужно добавить в корзину товар, которого не существует в каталоге, с возможностью задать ему произвольные назван...

Самодельная форма добавления элемента на API Битрикс

Компонент iblock.element.add.form написан таким образом, что вы не сможете (не попотев изрядно и не используя js) как уг...

Время на БД и веб сервере отличается на 3600 секунд, тест Битрикс

Достаточно часто, при проверке параметров системы, в Битрикс, можно увидеть одну из ошибок: Время на БД и на сервере- Вр...

Настройка: Redis кеширование для 1С-Битрикс, под Ubuntu

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

Установка счетчика Яндекс.Метрики на сайт с Content Security Policy (CSP)

Если на вашем сайте не отображаются данные о кликах и скроллинге в Яндекс.Метрике, вероятнее всего, это связано с настро...