Bitrix GetByID, получаю элемент инфоблока — проблема с кэшированием данных. Как решить?

На сайте созданы два инфоблока: в одном - статьи, выводятся компонентом новостей, в другом содержаться данные авторов данных статей.
Необходимо при просмотре детальных страниц новостей выводить из другого инфоблока данные их авторов.
При просмотре детальной страницы новости, из свойства привязка к элементу, получаю и передаю данные ID автора из компонента, используя глобальный массив $GLOBALS
$GLOBALS["AUTOR_ID"] = $arResult["PROPERTIES"]["AUTOR_ID"]["VALUE"];

Для вывода данных автора получаю из Глобального массива данные ID инфоблока и вытаскиваю данные автора используя CIBlockElement::GetByID($id_autor) , и затем вывожу в шаблоне.
<?php
if ($GLOBALS["AUTOR_ID"]) {
	$id_autor = $GLOBALS["AUTOR_ID"]; // получаю ID элемента инфоблока
	unset($GLOBALS["AUTOR_ID"]);
	}else{
	$id_autor = 2; // // Если данные не получены, задан ID элемента
	}
$res = CIBlockElement::GetByID($id_autor);
	if($ar_res = $res->GetNext())
?>	
		
<div class="card mb-4">	
	<div class="view overlay">
		<img src="<? echo CFile::GetPath($ar_res["PREVIEW_PICTURE"]); ?>" class="card-img-top" alt="Печник <?=$ar_res["NAME"];?>">
		<a><div class="mask rgba-white-slight waves-effect waves-light"></div></a>
	</div>
	<div class="card-body">
		<h5 class="card-title dark-grey-text text-center grey lighten-4 py-2">
			<strong><?=$ar_res['NAME'];?></strong>
		</h5>
		<p class="mt-3 dark-grey-text font-small text-center">
			<em><?=$ar_res["PREVIEW_TEXT"];?></em>
		</p>
	</div>
</div>


В данном случае код срабатывает, но при переходе на страницы других авторов, данные не меняются, точней меняются только после обновления кеша страницы.
Полагаю, проблема связана с кешированием.
Как решить проблему с кешированием данных, сделать так, что бы при посещении страниц других авторов менялись данные их авторов?
Возможно задачу можно решить другим, более рациональным способом. Прошу совета.
  • Вопрос задан
  • 318 просмотров
Решения вопроса 1
$GLOBALS["AUTOR_ID"] = $arResult["PROPERTIES"]["AUTOR_ID"]["VALUE"]; - вот это скорее всего у вас в шаблоне или в result_modifier.php. А может и в самодельном компоненте, но в кэшируемом блоке.

Вам надо вынести установку этой переменной за пределы кэшируемой области. Скажем component_epilog.php - там и место таким вещам.

А вообще передача через глобальную переменную, это плохо, я считаю. Лучше уж использовать свойства страницы.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы