Добрый день, дамы и господа! Такая ситуация - есть кастомизированный bitrix.catalog в котором есть перенаправления на стандартную страницу со списком товаров section.php и добавлено правило для перенаправления на страницу с товарами другого каталога (соответственно, другого инфоблока) collections.php. На каждой из этих страниц вызывается smart.filter и catalog.section. Все работает, как часы, до тех пор, пока не включаю автокэширование. После включения кэширования происходят паранормальные явления - на странице collection.php умный фильтр как выводился, так и выводится, а вот на странице section.php он пропадает. Совсем пропадает. То ли я дурак, то ли лыжи. Коды вызова фильтра идентичны. Есть подозрение, что дело в роутинге, но с выключенным кэшированием ведь все работает. ПОМОГИТЕ.
Код вызова фильтра:[CODE]<?$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"
)
);
?>
[/CODE]
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);
?>
[/CODE]
Код вызова фильтра:[CODE]<?$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"
)
);
?>
[/CODE]
Код component.php каталога
[CODE]<?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);
?>
[/CODE]