Суть вопроса:
В каталоге на странице 20 элементов. Необходимо вместо одного элемента выводить рекламный баннер в случайном месте (каталог "плитка" 4х5).
мое решение:
Вывод в шаблоне компонента catalog.section
template.php
Код в result_modifier.php
Получаю привязанный элемент раздела, передаю в GetList, выбираю один случайный элемент, сохраняю в $arResult, скармливаю в шаблон
Все это отлично работает ТОЛЬКО с выключенным кэшем. Подскажите как заставить работать с кэшем???
В каталоге на странице 20 элементов. Необходимо вместо одного элемента выводить рекламный баннер в случайном месте (каталог "плитка" 4х5).
мое решение:
Вывод в шаблоне компонента catalog.section
template.php
Код |
---|
function randNumber() //вынес в init.php { return rand(1, 19); }; <?$i=1?> <?foreach ($arResult['ITEMS'] as $arItem) :?> <article>/*контент*/</article> <? if(randNumber() == $i): ?>//проблема с кэшем <article>/*баннер $arResult["BANNER_LIST"]//проблема с кэшем*/</article> <? endif; ?> <?$i++;?> <?endforeach?> |
Получаю привязанный элемент раздела, передаю в GetList, выбираю один случайный элемент, сохраняю в $arResult, скармливаю в шаблон
Код |
---|
//Получаем баннер текущего раздела $bannerItems = array(); $arSectionSelect = array("ID", "UF_BANNER"); $arSectionFilter = array("IBLOCK_ID"=>$arParams["IBLOCK_ID"], "ID"=>$arResult["ID"]); $dbSectionList = CIBlockSection::GetList(array(), $arSectionFilter, false, $arSectionSelect); while($arSection = $dbSectionList->GetNext()){ $bannerItems = $arSection["UF_BANNER"]; }; $bannerList = array(); $arSelect = Array("ID", "NAME", "PREVIEW_PICTURE", "PROPERTY_NAME"); $arFilter = Array("IBLOCK_ID"=>23, "ACTIVE"=>"Y", "SECTION_ID"=>$bannerItems, 'INCLUDE_SUBSECTIONS' =>'Y'); $res = CIBlockElement::GetList(array("RAND"=>"ASC"), $arFilter, false, Array ("nTopCount" => 1), $arSelect); while($ob = $res->GetNextElement()){ $arFields = $ob->GetFields(); $bannerList = array( "NAME" => $arFields["NAME"], "BG" => $arFields["PREVIEW_PICTURE"], "DESCR" => $arFields["PROPERTY_NAME_VALUE"] ); }; //Сохраняем результат в кеш компонента if($bannerList){ $arResult["BANNER_LIST"] = $bannerList; $this->__component->setResultCacheKeys(array("BANNER_LIST")); }; |