Погуглив , везде написано, что компонент должен стандартно содержать в себе файлы:
.description.php
.parameters.php
component.php (без него якобы работать не будет)
Полез смотреть у себя (разработчик сайта не я, а фрилансер)
у меня по пути в папке компонента содержится:
Templates
-.default
-- result_modifier.php
--template.php
class.php
Объясните пожалуйста как мне настроить кеш компонента, если нет обязательных файлов, но оно как то работает?
Я так понимаю кеширование как - то тут в файле class.php нужно прописывать? Что то похожее про кеш записано уже!
Вот код из этого файла
<?php
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
use Bitrix\Highloadblock as HL;
use Bitrix\Main\Entity;
use Itbiz\Project;
class ItBizShowcaseMainMiddleSectionsList extends CBitrixComponent {
public function executeComponent(){
global $USER;
if ( !CModule::IncludeModule("iblock") )
return false;
if ( !CModule::IncludeModule("highloadblock") )
return false;
$brands = array();
$banners = array();
$sections = array();
$curIblock = (int)$_GET['iblock'];
$arIblocks = Project\Showcase::getIblockList();
if ( $curIblock <= 0 )
$curIblock = P_IBLOCK_ID_PRODUCTS;
elseif ( !array_key_exists($curIblock, $arIblocks) )
return;
// Кэширование...
$obCache = Project\Cache::getInstance();
$cacheParams = array($this->arParams);
$cacheTag = array(
'iblock_id_' . $curIblock,
'region_'.$_SESSION['ITBIZ_USERPLACE']['REGION']['ID']
);
if ( !$obCache->init(__CLASS__.'/sections/', $cacheParams, $cacheTag) ) {
$rs = CIBlockSection::GetList(
array(
'DEPTH_LEVEL' => 'DESC',
'SORT' => 'ASC',
'ID' => 'ASC'
),
array(
'ACTIVE' => 'Y',
'IBLOCK_ID' => $curIblock,
'<=DEPTH_LEVEL' => 2,
'!ID'=>3073,
'!SECTION_ID'=>3073
),
true,
array(
'ID',
'IBLOCK_SECTION_ID',
'NAME',
'SECTION_PAGE_URL',
'ELEMENT_CNT',
'UF_COLOR'
)
);
while ( $rw = $rs->GetNext() ){
// Разкомментировать, если нужно
// выводить секции только содержащие витрины
// if ( $rw['ELEMENT_CNT'] <= 0 )
// continue;
$tmp = array(
'id' => $rw['ID'],
'name' => $rw['NAME'],
'url' => $rw['SECTION_PAGE_URL'],
'color' => $rw['UF_COLOR'],
'items' => array()
);
if ( isset($sections[$rw['ID']]) ) {
$tmp['items'] = $sections[$rw['ID']];
unset($sections[$rw['ID']]);
}
$sections[(int)$rw['IBLOCK_SECTION_ID']][$rw['ID']] = $tmp;
}
$obCache->startDataCache($sections);
}else{
$sections = $obCache->getVars();
}
if ( empty($sections) )
return;
$sections = array_shift($sections);
//-------------------------------// Получим витрины для разделов...--------------------------------------------------------
$hlblock = HL\HighloadBlockTable::getById(19)->fetch();
$entityAdv = HL\HighloadBlockTable::compileEntity($hlblock);
$hlblock = HL\HighloadBlockTable::getById(18)->fetch();
$entitySect = HL\HighloadBlockTable::compileEntity($hlblock);
$arShowcase=array();
$propRegion = CIBlockProperty::GetList(Array("sort"=>"asc", "name"=>"asc"), Array("ACTIVE"=>"Y", "IBLOCK_ID"=>$curIblock,"CODE"=>"REGIONS"))->fetch();
$propRegion=$propRegion['ID'];
$propEntity=Project\ElementExTable::compilePropEntity($curIblock);
foreach(array_keys($sections) as $section){
//if ( !$obCache->init(__CLASS__.'/'.$section.'/showcases/', $cacheParams, $cacheTag) ) {
$query = new \Bitrix\Main\Entity\Query(Project\ElementExTable::getEntity());
$query
->registerRuntimeField("sectprice", array(
"data_type" => $entitySect->getDataClass(),
'reference' => array('=this.ID' => 'ref.UF_SHOWCASE'),
)
)
->registerRuntimeField("advdata", array(
"data_type" => $entityAdv->getDataClass(),
'reference' => array('=this.ID' => 'ref.UF_SHOWCASE'),
'join_type' => "INNER"
)
)
->registerRuntimeField("propdata", array(
"data_type" => $propEntity->getDataClass(),
'reference' => array('=this.ID' => 'ref.IBLOCK_ELEMENT_ID'),
'join_type' => "INNER"
)
)
->setSelect(array(
"ID",
"NAME",
'PREVIEW_PICTURE',
'PREVIEW_TEXT',
'IBLOCK_SECTION_ID',
'IBLOCK_ID',
'advdata.UF_BALANCE'
))
->setFilter(array(
"WF_STATUS_ID"=>1,
"ACTIVE"=>"Y",
"=sectprice.UF_ACTIVE"=>1,
">advdata.UF_BALANCE"=>0,
"sectprice.UF_SECTION"=>$section,
array(
"LOGIC" => "OR",
array(">ACTIVE_TO" => date("d-m-Y H:i:s")),
array("%ACTIVE_TO" => "")
),
"propdata.IBLOCK_PROPERTY_ID"=>$propRegion,
"propdata.VALUE"=>$_SESSION['ITBIZ_USERPLACE']['REGION']['ID'],
))
->setOrder(array("sectprice.UF_PRICE"=>"DESC"))
->setLimit(4);
$result = $query->exec();
//PR($query->getLastQuery());
$result = new \CDBResult($result);
$showcases=array();
while($rw=$result->fetch()){
$showcases[]=array(
'id' => $rw['ID'],
'name' => $rw['NAME'],
'url' => $rw['ITBIZ_PROJECT_ELEMENT_EX_advdata_UF_BALANCE']==666666?"/":"/".$rw['IBLOCK_ID']."/".$rw['ID']."/".$rw['IBLOCK_SECTION_ID']."/",
'img' => $rw['PREVIEW_PICTURE'],
'descr'=> $rw['PREVIEW_TEXT'],
);
}
/*$obCache->startDataCache($showcases);
}else{
$showcases = $obCache->getVars();
}*/
$sections[$section]['showcase']=$showcases;
//$arShowcase[$section]=$showcases;
}
//PR($arShowcase);
//-------------------------------// Получим бренды для разделов...--------------------------------------------------------
if ( !$obCache->init(__CLASS__.'/elements/', $cacheParams, $cacheTag) ) {
$rs=CIblockElement::getList(array(),array("IBLOCK_ID"=>$curIblock,"SECTION_ID"=>array_keys($sections),"INCLUDE_SUBSECTIONS"=>"Y","!PROPERTY_BRAND"=>false),array("IBLOCK_SECTION_ID","PROPERTY_BRAND"),false,array("ID","PROPERTY_BRAND","IBLOCK_SECTION_ID"));
$brands=array();
$arSectBrands=array();
while($rw=$rs->fetch()){
$psect=$this->getParentSection($rw['IBLOCK_SECTION_ID'],$sections);
if($psect>0){
if(array_search($rw['PROPERTY_BRAND_VALUE'],$arSectBrands[$psect])===false or !is_array($arSectBrands[$psect]))
$arSectBrands[$psect][]=$rw['PROPERTY_BRAND_VALUE'];
$brands = array_merge($brands, array_diff(array($rw['PROPERTY_BRAND_VALUE']), $brands));
}
}
$rs = Project\BrandsTable::getList(array(
'filter' => array('UF_XML_ID' => $brands),
'select' => array(
'name' => 'UF_NAME',
'code' => 'UF_XML_ID',
'img' => 'UF_FILE'
)
));
$brands = array_flip($brands);
while ( $rw = $rs->Fetch() )
$brands[$rw['code']] = array(
'name' => $rw['name'],
'code' => $rw['code'],
'img' => $rw['img']
);
$obCache->startDataCache(array(
'sectBrands' => $arSectBrands,
'brands' => $brands,
));
}else{
$tmp = $obCache->getVars();
$arSectBrands = $tmp['sectBrands'];
$brands = $tmp['brands'];
unset($tmp);
}
foreach($arSectBrands as $sect=>$arBrands){
$sections[$sect]['brands']=$arBrands;
}
// ------------------ Баннеры для разделов -----------------------------------------------//
$banners=array();
foreach (array_keys($sections) as $sectionID){
$rs = Project\Banner::getList(array(
'type_sid' => $curIblock == P_IBLOCK_ID_PRODUCTS?'MAIN_MIDDLE_SECTION':"SECTION_MID_BIG",
'showcase' => $sectionID,
'limit'=>1
),array("CONTRACT"=>"DESC","SHOW_COUNT"=>"ASC","WEIGHT"=>"DESC"));
foreach ( $rs as $v ) {
$banners[$v['fields']['SHOWCASE']] = array(
'html' => $v['html']
);
}
}
$this->arResult = array(
'brands' => $brands,
'banners' => $banners,
'sections' => $sections
);
$this->includeComponentTemplate();
}
private function getParentSection($sectionID,$sections){
if(!array_key_exists($sectionID,$sections)){
foreach($sections as $key=>$sectArr){
if(array_key_exists($sectionID,$sectArr['items'])){
return $key;
}
}
return false;
}else{
return $sectionID;
}
}
}
Где включить кеширование в настройках компонента я знаю, а вот если нет таких настроек то где прописать в коде и что прописать что бы кеширование заработало?