Сегодня дошли руки до давнишней задачи — аналоги товаров для сайта ScooterPrice.ru.
В этот раз мы объединили товары из графических схем с папками аналогии. Структура справочника стала такая:
Где в инфоблоке графических схем в каждой конечной папке детали лежит список артикулов товаров этой детали:
Этот же список используется в карточке самого товара для отображения его аналогов:
И, конечно, сам код компонента аналогов:
<? if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); if (!empty($arParams['SKU'])) { $arFilter = Array("NAME"=>$arParams['SKU'],"IBLOCK_ID"=>21);//21 иблок с папками аналогами $arSelect = Array("IBLOCK_SECTION_ID"); $SECTION = CIBlockElement::GetList(null, $arFilter,null,null,$arSelect); if ($SECTION=$SECTION->GetNextElement()){ $SECTION = $SECTION->GetFields(); $arFilter = Array("IBLOCK_SECTION_ID"=>$SECTION['IBLOCK_SECTION_ID'],"IBLOCK_ID"=>21); $arSelect = Array("NAME"); $ANALOG = CIBlockElement::GetList(null, $arFilter,null,null,$arSelect); if ($ANALOG->SelectedRowsCount()>1){ ?> <h4>Аналоги и заменители</h4> <table class="table"> <? while ($ELEMENT=$ANALOG->GetNextElement()){ $ELEMENT=$ELEMENT->GetFields(); if ($ELEMENT["NAME"]!==$arParams['SKU']){ $arFilter = Array("PROPERTY_CML2_ARTICLE"=>$ELEMENT["NAME"]); $arSelect = Array("ID", "NAME", "DETAIL_PAGE_URL","PREVIEW_PICTURE","CATALOG_GROUP_1","CATALOG_QUANTITY"); $CARGO = CIBlockElement::GetList(null, $arFilter,null,null,$arSelect); if ($CARGO=$CARGO->GetNext()){ $IMG=CFile::GetPath($CARGO["PREVIEW_PICTURE"]); $INSTOK=$CARGO["CATALOG_QUANTITY"]; $INSTOKINORDER=$APPLICATION->IncludeComponent("spl:instock","",Array("SKU" => $ELEMENT["NAME"])); ?> <tr class="<?if (!$INSTOK&&!$INSTOKINORDER):?>alert-danger<?elseif (!$INSTOK&&$INSTOKINORDER):?>alert-warning<?else:?><?endif;?>"> <td class="hidden-sm hidden-xs"><?if ($IMG):?><img src="<?=$IMG?>" class="img-thumbnail" width="64"><?endif;?></td> <td class="text-left"><a href="<?=$CARGO["DETAIL_PAGE_URL"]?>"><?=$ELEMENT["NAME"]?></a></td> <td class="text-left"><a href="<?=$CARGO["DETAIL_PAGE_URL"]?>"><?=$CARGO["NAME"]?></a></td> <td class="text-right"><?=$CARGO["CATALOG_PRICE_1"]?></td> </tr> <? }//if cargo }//if ($element["NAME"]!==$arParams['SKU']) }//while ?> </table> <? }//analog count }//is section } ?>
Живой вид доступен на странице товара http://scooterprice.ru/catalog/element/13226/ или из карточки детали MotoDoc