Добрый день, дамы и господа! Такая ситуация - есть кастомизированный bitrix.catalog в котором есть перенаправления на стандартную страницу со списком товаров section.php и добавлено правило для перенаправления на страницу с товарами другого каталога (соответственно, другого инфоблока) collections.php. На каждой из этих страниц вызывается smart.filter и catalog.section. Все работает, как часы, до тех пор, пока не включаю автокэширование. После включения кэширования происходят паранормальные явления - на странице collection.php умный фильтр как выводился, так и выводится, а вот на странице section.php он пропадает. Совсем пропадает. То ли я дурак, то ли лыжи. Коды вызова фильтра идентичны. Есть подозрение, что дело в роутинге, но с выключенным кэшированием ведь все работает. ПОМОГИТЕ.
Код вызова фильтра:
Код вызова фильтра:
| Код |
|---|
<?$APPLICATION->IncludeComponent( "bitrix:catalog.smart.filter", "catalog", Array( "CACHE_GROUPS" => "Y", "CACHE_TIME" => "36000000", "CACHE_TYPE" => "A", "COMPONENT_TEMPLATE" => "catalog", "CONVERT_CURRENCY" => "N", "DISPLAY_ELEMENT_COUNT" => "Y", "FILTER_NAME" => "mainCatalogFilter", "HIDE_NOT_AVAILABLE" => "N", "IBLOCK_ID" => $arResult['IBLOCK_ID'], "IBLOCK_TYPE" => "1c_catalog", "INSTANT_RELOAD" => "N", "PAGER_PARAMS_NAME" => "arrPager", "PRICE_CODE" => [], "SAVE_IN_SESSION" => "N", "SECTION_CODE" => $arResult["VARIABLES"]["SECTION_CODE"], "SECTION_ID" => $arResult["VARIABLES"]["SECTION_ID"], "SECTION_CODE_PATH" => "", "SECTION_DESCRIPTION" => "-", "SHOW_ALL_WO_SECTION" => 'Y', "SECTION_TITLE" => "-", "SEF_MODE" => "Y", "SEF_RULE" => "/catalog/#SECTION_CODE#/filter/#SMART_FILTER_PATH#/apply/", "SMART_FILTER_PATH" => $_REQUEST["SMART_FILTER_PATH"], "TEMPLATE_THEME" => "blue", "XML_EXPORT" => "N" ) ); ?> |
Код component.php каталога
| Код |
|---|
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
if (isset($arParams["USE_FILTER"]) && $arParams["USE_FILTER"]=="Y") {
$arParams["FILTER_NAME"] = trim($arParams["FILTER_NAME"]);
if ($arParams["FILTER_NAME"] === '' || !preg_match("/^[A-Za-z_][A-Za-z01-9_]*$/", $arParams["FILTER_NAME"]))
$arParams["FILTER_NAME"] = "arrFilter";
}
else
$arParams["FILTER_NAME"] = "";
$smartBase = ($arParams["SEF_URL_TEMPLATES"]["section"]? $arParams["SEF_URL_TEMPLATES"]["section"]: "#SECTION_CODE#/");
$arDefaultUrlTemplates404 = array(
"sections" => "",
"collections" => "#SECTION_CODE#/collections/",
"section" => "#SECTION_CODE#/",
"element" => "#SECTION_CODE#/#ELEMENT_CODE#/",
"compare" => "compare.php?action=COMPARE",
"section_filter" => $smartBase."filter/#SMART_FILTER_PATH#/apply/",
"collections_filter" => $smartBase."collections/filter/#SMART_FILTER_PATH#/apply/",
);
$arDefaultVariableAliases404 = array();
$arDefaultVariableAliases = array();
$arComponentVariables = array(
"SECTION_ID",
"SECTION_CODE",
"ELEMENT_ID",
"ELEMENT_CODE",
"action",
);
if($arParams["SEF_MODE"] == "Y") {
$arVariables = array();
$engine = new CComponentEngine($this);
if (\Bitrix\Main\Loader::includeModule('iblock')) {
$engine->addGreedyPart("#SECTION_CODE_PATH#");
$engine->addGreedyPart("#SMART_FILTER_PATH#");
$engine->setResolveCallback(array("CIBlockFindTools", "resolveComponentEngine"));
}
$arUrlTemplates = CComponentEngine::MakeComponentUrlTemplates($arDefaultUrlTemplates404, $arParams["SEF_URL_TEMPLATES"]);
$arVariableAliases = CComponentEngine::MakeComponentVariableAliases($arDefaultVariableAliases404, $arParams["VARIABLE_ALIASES"]);
$componentPage = $engine->guessComponentPath(
$arParams["SEF_FOLDER"],
$arUrlTemplates,
$arVariables
);
if ($componentPage === "section_filter")
$componentPage = "section";
if ($componentPage === "collections_filter")
$componentPage = "collections";
if(!$componentPage && isset($_REQUEST["q"]))
$componentPage = "search";
$b404 = false;
if(!$componentPage) {
$componentPage = "collections";
$b404 = true;
}
//id инфоблока
$iBlockID = CATALOG_IBLOCK_ID;
if ($componentPage == "collections")
$iBlockID = ID_IBLOCK_COLLECTION;
if(($componentPage == "section") || ($componentPage == "collections")) {
if (isset($arVariables["SECTION_ID"]))
$b404 |= (intval($arVariables["SECTION_ID"])."" !== $arVariables["SECTION_ID"]);
else
$b404 |= !isset($arVariables["SECTION_CODE"]);
//id раздела
$section = \Bitrix\Iblock\SectionTable::getRow([
'filter' => [
'IBLOCK_ID' => $iBlockID,
'CODE' => $arVariables["SECTION_CODE"]
],
'select' => [
'ID'
]
]);
$arVariables["SECTION_ID"] = $section['ID'];
}
if($b404 && CModule::IncludeModule('iblock')) {
$folder404 = str_replace("\\", "/", $arParams["SEF_FOLDER"]);
if ($folder404 != "/")
$folder404 = "/".trim($folder404, "/ \t\n\r\0\x0B")."/";
if (substr($folder404, -1) == "/")
$folder404 .= "index.php";
if ($folder404 != $APPLICATION->GetCurPage(true)) {
\Bitrix\Iblock\Component\Tools::process404(
""
,($arParams["SET_STATUS_404"] === "Y")
,($arParams["SET_STATUS_404"] === "Y")
,($arParams["SHOW_404"] === "Y")
,$arParams["FILE_404"]
);
}
}
CComponentEngine::InitComponentVariables($componentPage, $arComponentVariables, $arVariableAliases, $arVariables);
$arResult = array(
"FOLDER" => $arParams["SEF_FOLDER"],
"URL_TEMPLATES" => $arUrlTemplates,
"VARIABLES" => $arVariables,
"ALIASES" => $arVariableAliases,
"IBLOCK_ID" => $iBlockID
);
}
$this->IncludeComponentTemplate($componentPage);
?>
|