Вывести минимальную цену самого дешевого торгового предложения

Просмотров: 32918

Если у товара несколько торговых предложений и у каждого предложения разные цены, иногда требуется вывести минимальную цену торговых предложений, отсортировав ее из всех торговых предложений. Можно воспользоваться API Битрикс обратившись к CCatalogSKU::GetInfoByProductIBlock

Сделать это просто, нужно добавить вот такой код в catalog.section:

$mxResult = CCatalogSKU::GetInfoByProductIBlock(
    $arParams['IBLOCK_ID']
);
if (is_array($mxResult)) {
    $rsOffers = CIBlockElement::GetList(
        array(
            "catalog_PRICE_1" => "ASC" // Сортируем по цене, ID нужной
        ),
        array(
            'IBLOCK_ID' => $mxResult['IBLOCK_ID'],
            'PROPERTY_' . $mxResult['SKU_PROPERTY_ID'] => $arElement["ID"]
        ),
        false,
        array(
            'nTopCount' => 1 // Получаем один элемент
        ),
        array(
            'ID'
        )
    );
    while ($arOffer = $rsOffers->Fetch()) {
        $ar_price = GetCatalogProductPrice($arOffer["ID"], 1);
        echo "

от " . $ar_price["PRICE"] . " руб.

"; break; } }
  • С помщью CCatalogSKU::GetInfoByProductIBlock получили информацию о инфоблоке торговых предложений, зная инфоблок торгового каталога (из параметра $arParams['IBLOCK_ID'])
  • Далее с помощью CIBlockElement::GetList получили список связанных с товаром торговых предложений: отсортировали его по возрастанию цены и ограничились одним (самым дешевым)
  • Вывели цену этого, одного, торгового предложения.

Усложненный вариант вывода:

Если нужно помимо минимальной стоимости показать еще и цены отдельных предложений, плюс дать возможность отправить заказ конкретного предложения в корзину. Можно использовать вот такой код:

 <?if(is_array($arElement["OFFERS"]) && !empty($arElement["OFFERS"])):?> 
 <!-- Показываем наименьшую для от --> 
 		<div class="pricebl"> 
 				<? 
 					$intIBlockID = 32; 
 					$mxResult = CCatalogSKU::GetInfoByProductIBlock( 
 					$intIBlockID 
 					); 
 					if (is_array($mxResult)) 
 						{ 
 							$rsOffers = CIBlockElement::GetList(array("PRICE"=>"ASC"),array('IBLOCK_ID' => $mxResult['IBLOCK_ID'], 'PROPERTY_'.$mxResult['SKU_PROPERTY_ID'] => $arElement["ID"])); 
 							while ($arOffer = $rsOffers->GetNext()) 
 								{ 
 									$ar_price = GetCatalogProductPrice($arOffer["ID"], 7); 
 									echo "<p>от " .$ar_price["PRICE"]. " руб.</p>" ; 
 									break; 
 								} 
 						} 
 			 ?> 
 		 </div> 
 <!-- Показываем предложения товаров --> 
 		<div class="offers"> 
 		<table class="offerstb" width="100%" cellspacing="0" cellpadding="0"> 
 				<?foreach($arElement["OFFERS"] as $arOffer):?> 
 					<tr> 
 					<?foreach($arOffer["PRICES"] as $code=>$arPrice):?> 
 						<?if($arPrice["CAN_ACCESS"]):?> 
 							<td><b><?=$arPrice["PRINT_VALUE"]?></b></td> 
 						<?endif;?> 
 					<?endforeach;?> 
 					<td width="100"><p>/ 
 					<?foreach($arOffer["DISPLAY_PROPERTIES"] as $pid=>$arProperty):?> 
 							<? 
 							if(is_array($arProperty["DISPLAY_VALUE"])) 
 								echo implode("&nbsp;/&nbsp;", $arProperty["DISPLAY_VALUE"]); 
 							else 
 								echo $arProperty["DISPLAY_VALUE"]; 
 							?> 
 						кг.</p> 
 					<?endforeach?> 
 					</td><td> 
 							<form action="<?=POST_FORM_ACTION_URI?>" method="post" enctype="multipart/form-data"> 
 								<input type="text" name="<?echo $arParams["PRODUCT_QUANTITY_VARIABLE"]?>" value="1" size="5" style="display:none;"> 
 								<input type="hidden" name="<?echo $arParams["ACTION_VARIABLE"]?>" value="BUY"> 
 								<input type="hidden" name="<?echo $arParams["PRODUCT_ID_VARIABLE"]?>" value="<?echo $arOffer["ID"]?>"> 
 								<input type="submit" name="<?echo $arParams["ACTION_VARIABLE"]."BUY"?>" value="Купить" style="display:none;"> 
 								<input type="submit" name="<?echo $arParams["ACTION_VARIABLE"]."ADD2BASKET"?>" value="В корзину"> 
 							</form> 
 					</td></tr> 
 				<?endforeach;?> 
 		</table> 
 		</div> 
 <?else:?><!-- Если у товара предложений вообще нет --> 
 	<?foreach($arElement["PRICES"] as $code=>$arPrice):?> 
 		<?if($arPrice["CAN_ACCESS"]):?> 
 			<div class="nooffers"> 
 			<?if($arPrice["DISCOUNT_VALUE"] < $arPrice["VALUE"]):?> 
 				<s><?=$arPrice["PRINT_VALUE"]?></s> <?=$arPrice["PRINT_DISCOUNT_VALUE"]?> 
 			<?else:?> 
 				<p><?=$arPrice["PRINT_VALUE"]?></p> 
 			<?endif;?> 
 			<noindex> 
 			     <a href="<?echo $arElement["ADD_URL"]?>" rel="nofollow">В корзину</a> 
 			</noindex> 
 			</div> 
 		<?endif;?> 
 	<?endforeach;?> 
 <?endif?> 

Получится примерно так. С помощью стилей можно будет сделать так, чтобы предложения показывались только при наведении.

Шаблон списка элементов как у битрикс

И напоследок, модернизация данного решения до вида похожего на список элементов как в типовом шаблоне битрикс Одежда+, но более простого для чтения и внесения правок (на основе описанного выше метода). Суть в том, что вывод торговых предложений представлен в виде табов. Скачать

Выглядит вот так:

Стоимость разработки на 1С-Битрикс:

Индивидуальная разработка магазина

от 500 000 руб. от 5-ти недель

Разработка магазина на 1С-Битрикс с нуля. Дизайн, сборка и оптимизация производительности под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Запуск сайта на готовом решении

от 100 000 руб. от 7-ми дней

Вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Магазин, быстро запускается на базе одного из 200-та готовых решений.

Мобильное приложение

от 500 000 руб. от 1-го месяца

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Сайт компании

от 350 000 руб. от 1-го месяца

Корпоративный сайт с информационными разделами, каталогом товаров или услуг. Включает формы обратной связи карточек каталога, любое количество статичных и динамичных разделов.

Инфресурс

от 400 000 руб. от 5-ти недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

Лечение сайтов от вирусов

от 40 000 руб. от 2-х дней

Выполню полную проверку сайта и окружения. В случае обнаружения вирусов проведу полный комплекс лечения проекта и закрытия лазеек.