Задать вопрос
just_guy95
@just_guy95
Bitrix 1C

Почему в кэшируемой области при вызове метода CIBlockSection::GetList кеш обновляется не корректно?

Всем добрый вечер.
Что имею:
В параметрах время жизни кэша 30 секунд.

template.php
<pre>
	<? var_dump($arResult) ?>
	</pre>


component.php(метод CIBlockSection::GetList):
if ($this->StartResultCache()) {
	if (!CModule::IncludeModule("iblock")) {
		$this->AbortResultCache();
		ShowError("IBLOCK_MODULE_NOT_INSTALLED");
		return false;
	}
	$arSort= array("SORT" => "ASC", "DATE_ACTIVE_FROM" => "DESC", "ID" => "DESC");
	$arFilter = array("IBLOCK_ID" => $arParams["IBLOCK_ID"], "ACTIVE" => "Y", "ACTIVE_DATE" => "Y");
	$arSelect = array("ID", "IBLOCK_ID", "IBLOCK_SECTION_ID", "NAME", "DATE_ACTIVE_FROM", "DEPTH_LEVEL", "UF_MAIN_SECTION");

	$rsElement = CIBlockSection::GetList(false, $arFilter, false, $arSelect, false);

	while ($obElement = $rsElement->GetNext()) {
		$arResult["ITEMS"][] = $obElement;
	}
	$this->SetResultCacheKeys(array());
	$this->IncludeComponentTemplate();
}


component.php(метод CIBlockElement::GetList):
if ($this->StartResultCache()) {
	if (!CModule::IncludeModule("iblock")) {
		$this->AbortResultCache();
		ShowError("IBLOCK_MODULE_NOT_INSTALLED");
		return false;
	}
	$arSort= array("SORT" => "ASC", "DATE_ACTIVE_FROM" => "DESC", "ID" => "DESC");
	$arFilter = array("IBLOCK_ID" => $arParams["IBLOCK_ID"], "ACTIVE" => "Y", "ACTIVE_DATE" => "Y");
	$arSelect = array("ID", "IBLOCK_ID", "NAME", "DATE_ACTIVE_FROM", "PREVIEW_TEXT", "PREVIEW_PICTURE");

	$rsElement = CIBlockElement::GetList($arSort, $arFilter, false, $arNavParams, $arSelect);

	while($obElement = $rsElement->GetNextElement()) {
		$arElement = $obElement->GetFields();
		$arResult["ITEMS"][] = $arElement;
	}
	$this->SetResultCacheKeys(array());
	$this->IncludeComponentTemplate();
}


Что делаю:
Сейчас изучаю механизм кэширования и так уж получилось, что начал с кэширования на bitrix. Заметил такую штуку, что если в кэшируемой области вызываю метод CIBlockSection::GetList и результат выборки вношу в $arResult, то:
1. При сбрасывание кэша на странице, получаю результат выборки template.php;
2. При изменении элемента инфоблока кэш обновляется, но результата выборки в template.php нет;
3. Когда заканчивается время жизни кэша, инициирую хит, но результата выборки в template.php нет;

Если же в области кэширования использую CIBlockElement::GetList, то все работает нормально:
1. При изменении элемента инфоблока кэш обновляется, и результат выборки попадает в template.php;
2. Когда заканчивается время жизни кэша, инициирую хит, и результата выборки попадает в template.php;

Вопрос:
Проблема в самом методе CIBlockSection::GetList или в моем коде?
  • Вопрос задан
  • 380 просмотров
Подписаться 2 Средний 10 комментариев
Решения вопроса 1
just_guy95
@just_guy95 Автор вопроса
Bitrix 1C
В итоге проблема была не в CIBlockSection::GetList, а в CIBlockElement::GetList. По какой-то причины CIBlockElement::GetList игнорировал правила доступы, которые устанавливаются в настройках инфоблока. Более подробно в комментариях к вопросу (смотри выше)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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