После неудовлетворительного переезда с джумлы на Битрикс (так криво интегрировала компания ИЕСА)
остался код:
Суть кода - вывод в блоке привязанных к акции товаров. Привязка осуществляется через стандартный функционал Битрикса - id элементов. Изначально планировалась привязки к Бренду и Группе товаров (т.е. к section).
Кто сможет оптимизировать этот код убрав лишние запросы и добавив кеширование?
остался код:
Код |
---|
<? $dbAction = CIBlockElement::GetList(array('name'=>'ASC'), array('IBLOCK_ID'=>'5', 'ACTIVE'=>'Y', 'PROPERTY_FOR_DILER_VALUE'=>false), FALSE, array('nTopCount'=>30), array('PROPERTY_GROUP_OF_BRAND', 'PROPERTY_PROD_GRUP', 'IBLOCK_ID', 'ID', 'CODE', 'NAME', 'PROPERTY_BRAND', 'PROPERTY_COLOR_ELEM')); if ($dbAction->SelectedRowsCount()>0) { ?> <? $sky=1; ?> <div id="rbl_act_title">Акции</div> <div id="rbl_act_content"> <div class="nav_act"><a id="next2" href="#"><img src="/templates/edm/img/uparrow.gif" width="46" alt="Предыдущие"></a></div> <div id="s2"> <div> <? while ($arAction = $dbAction->GetNext()) { /*if ($arAction['PROPERTY_BRAND_VALUE'] && $arAction['PROPERTY_GROUP_OF_BRAND_VALUE']=='да') { $dbSec = CIBlockSection::GetList(array(), array('IBLOCK_ID'=>'2', 'ACTIVE'=>'Y', 'UF_BRAND_PROD'=>$arAction['PROPERTY_BRAND_VALUE']), FALSE, array('UF_*')); while ($arSec = $dbSec->GetNext()) { $arrID[] = array("ID"=>$arSec['ID'], "ACTION_ID"=>$arAction['ID'], "ACTION_NAME"=>$arAction['NAME']); } } elseif ($arAction['PROPERTY_PROD_GRUP_VALUE']) { $dbEl = CIBlockElement::GetList(array(), array('IBLOCK_ID'=>'2', 'ACTIVE'=>'Y', 'SECTION_ID'=>$arAction['PROPERTY_PROD_GRUP_VALUE'], 'INCLUDE_SUBSECTIONS'=>'Y'), array('IBLOCK_SECTION_ID'), FALSE, array('IBLOCK_ID', 'ID', 'IBLOCK_SECTION_ID')); while ($arEl = $dbEl->GetNext()) { if (!in_array($arEl['IBLOCK_SECTION_ID'], $arrID)) { $arrID[] = array("ID"=>$arEl['IBLOCK_SECTION_ID'], "ACTION_ID"=>$arAction['ID'], "ACTION_NAME"=>$arAction['NAME']); } } }*/ if ($arAction['PROPERTY_COLOR_ELEM_VALUE']) { $dbEl = CIBlockElement::GetList(array(), array('IBLOCK_ID'=>'2', 'ACTIVE'=>'Y', 'ID'=>$arAction['PROPERTY_COLOR_ELEM_VALUE'], 'INCLUDE_SUBSECTIONS'=>'Y'), FALSE, FALSE, array('IBLOCK_ID', 'ID', 'IBLOCK_SECTION_ID')); while ($arEl = $dbEl->GetNext()) { if (!in_array($arEl['IBLOCK_SECTION_ID'], $arrID)) { $arrID[] = array("ID"=>$arEl['IBLOCK_SECTION_ID'], "ACTION_ID"=>$arAction['ID'], "ACTION_CODE"=>$arAction['CODE'], "ACTION_NAME"=>$arAction['NAME'], "COLOR_ID"=>$arAction['PROPERTY_COLOR_ELEM_VALUE']); } } } } //var_dump($arrID); //var_dump($arrID); $skysky=0; $in_str=0; $biliSec=array(); while ($skysky!=8) { $rand = rand(0, (count($arrID)-1)); $idSec = $arrID[$rand]['ID']; //if (in_array($idSec, $biliSec)) { // continue; //} // else { $biliSec[]=$idSec; //} $idAct = $arrID[$rand]['ACTION_CODE']; $nameAct = $arrID[$rand]['ACTION_NAME']; $arSecL = GetIblockSection($idSec); $tmpSec = array(); $nav = CIBlockSection::GetNavChain('2', $idSec); while ($tmpNav = $nav->GetNext()) { if ($tmpNav['CODE']!='') { $tmpSec[]=$tmpNav['CODE']; } else { $tmpSec[]=$tmpNav['ID']; } } $link = '/catalog/'; $link .= $tmpSec[count($tmpSec)-2].'/'; $link .= $tmpSec[count($tmpSec)-1].'/'; $arFilterMainGood = array('IBLOCK_ID'=>'2', 'SECTION_ID'=>$idSec, 'ACTIVE'=>'Y'); if ($arrID[$rand]['COLOR_ID']) { $arFilterMainGood['ID']=$arrID[$rand]['COLOR_ID']; } else { $arFilterMainGood['PROPERTY_MAIN_GOOD_VALUE']='да'; } $dbMainGood = CIBlockElement::GetList(array(), $arFilterMainGood, FALSE, FALSE, array('PROPERTY_MAIN_GOOD', 'IBLOCK_ID', 'ID', 'NAME', 'PREVIEW_PICTURE', 'PREVIEW_TEXT', 'PROPERTY_BEST_GOOD', 'CODE')); if ($dbMainGood->SelectedRowsCount()<=0) { $dbMainGood = CIBlockElement::GetList(array(), array('IBLOCK_ID'=>'2', 'SECTION_ID'=>$idSec, 'ACTIVE'=>'Y'), FALSE, array('nTopCount'=>'1'), array('IBLOCK_ID', 'ID', 'NAME', 'PREVIEW_PICTURE', 'PREVIEW_TEXT', 'CODE')); } $arMainGood = $dbMainGood->GetNext(); if ($arMainGood['CODE']!='') { $link .= $arMainGood['CODE'].'/'; } else { $link .= $arMainGood['ID'].'/'; } if (!$arMainGood['PREVIEW_PICTURE']) { continue; } $in_str++; if($in_str==3) { $in_str = 1; echo '</div><!-- div -->'; echo '<div>'; } ?> <div class="nbl"> <div class="nbl_ramka"> <a title="<?=$arSecL['NAME']?>" href="/specials/<?=$idAct?>/"><img src="<?= CFile::GetPath($arMainGood['PREVIEW_PICTURE']) ?>" alt="<?=$arSecL['NAME']?>"></a> </div> <div class="ramka1" id="iePNG"><a href="/specials/<?=$idAct?>/" title="<?=$arSecL['NAME']?>"><img src="/templates/edm/img/ramka1_none.gif"></a></div> <? if ($arMainGood['PROPERTY_BEST_GOOD_VALUE']=='Y') { ?> <div class="nbl_hit" id="iePNG"><a href="/specials/<?=$idAct?>/" title="<?=$nameAct?>"><img src="/templates/edm/img/icon_none_big.gif"></a></div> <? } ?> <div class="nbl_act" id="iePNG"><a href="/specials/<?=$idAct?>/" title="<?=$nameAct?>"><img src="/templates/edm/img/icon_none_small.gif"></a></div> <div class="nbl_text"> <div><ul><li><a title="<?=$arSecL['NAME']?>" href="/specials/<?=$idAct?>/"><?=$arSecL['NAME']?></a></li></ul></div> </div> </div> <? $sky++; $skysky++; ?> <? } ?> </div> </div><!-- s2 --> <div class="nav_act"><a id="prev2" href="#"><img src="/templates/edm/img/downarrow.gif" width="46" alt="Следующие"></a></div> <!-- блок акции.конец --> </div> <? } ?> |
Суть кода - вывод в блоке привязанных к акции товаров. Привязка осуществляется через стандартный функционал Битрикса - id элементов. Изначально планировалась привязки к Бренду и Группе товаров (т.е. к section).
Кто сможет оптимизировать этот код убрав лишние запросы и добавив кеширование?