Если у товара несколько торговых предложений и у каждого предложения разные цены, иногда требуется вывести минимальную цену торговых предложений, отсортировав ее из всех торговых предложений. Можно воспользоваться API Битрикс обратившись к CCatalogSKU::GetInfoByProductIBlock
Сделать это просто, нужно добавить вот такой код в catalog.section:
<div class="pricebl"> <? $intIBlockID = 4; $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"], 1); echo "<p>от ".$ar_price["PRICE"]." руб. </p>" ; break; } } ?> </div>
Где:
$intIBlockID = 4; - ID нашего инфоблока
GetCatalogProductPrice($arOffer["ID"], 1); - ID необходимого типа цен для вывода
Если нужно помимо минимальной стоимости показать еще и цены отдельных предложений, плюс дать возможность отправить заказ конкретного предложения в корзину. Можно использовать вот такой код:
<?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(" / ", $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?>
Получится примерно так. С помощью стилей можно будет сделать так, чтобы предложения показывались только при наведении.
И напоследок, модернизация данного решения до вида похожего на список элементов как в типовом шаблоне битрикс Одежда+, но более простого для чтения и внесения правок (на основе описанного выше метода). Суть в том, что вывод торговых предложений представлен в виде табов.
Выглядит вот так:
![]()
Александр Христич
|
Михаил, а как работает скидка на торговые предложения, и если на них скидка тоже действует, то как вывести старую и новую(со скидкой) цену?
Спасибо большое! |
![]()
Михаил Базаров
|
||
|
||
![]()
Александр Христич
|
||||
|
||||
![]()
lexusus
|
Добрый день,
Подскажите пожалуйста как вывести название Типа цены, например имеется несколько видов цен (Оптовая, Оптовая - 10% и тд). Каждой группе клиентов присвоен свой тип. Вывыести нужно в списке каталога перед ценой. Спасибо. |
![]()
Михаил Базаров
|
||
|
||
![]()
lexusus
|
||||||
|
||||||
![]()
Марк Соколов
|
Не подскажите как вывести просто информационно, без привязки к корзине не только минимальную цену торговых предложений, но и розничную для оптового покупателя, т..к существует две цены, а в дефолтном шаблоне показывается только минимальная для своей группы пользователей, мысли натолкнули на GetCatalogProductPrice но не дочерпал)) Поможете, дело еще в том, что простым переключением веса товара (это свойства торг предложений) изменяется только минимальная (старая и новая цена - если есть скидка)
|
![]()
Сергей Бушкевич
|
Михаил, не подскажете. Почему при вставке этой функции в цене выводятся нули после запятой. Хотя на всем сайте цена выводится без их
|
![]()
Антон Сурнин
|
||
Добрый день!
Подскажите пожалуйста как вывести цену и название. Использую ред. Старт. Цена хранится в созданом мной поле price.
|
||
![]()
Михаил Базаров
|
||
В старте нет модуля sale (магазина). Если цена просто в свойстве, выводите как простое свойство- типа строка <? echo $arResult['DISPLAY_PROPERTIES']['КОД_СВОЙСТВА']['~VALUE'];?> |
||
![]()
Артур
|
Добрый день, мы используем несколько видов цен,
подскажите пожалуйста как Вывести минимальную цену(тип цены Опт id=3) торговых предложений. спс) |
![]()
Михаил Базаров
|
||||
|
||||
![]()
Вячеслав
|
Михаил, насколько я понял ["SKU_PROPERTY_ID"] - это ID свойства привязки предложения к товару.
И соответственно выводится не минимальная цена СКУ, а цена у которого ID наименьший среди других. На моем примере это видно (см.скрин). Так как сделать сортировку именно по цене? |
![]()
Михаил Базаров
|
||
"PRICE"=>"ASC" |
||
![]()
Вячеслав
|
Разобрался.
В новой версии модуля catalog (начиная с версии 18.6.200) изменились поля. Теперь для сортировки по цене нужно в getlist передавать параметр catalog_PRICE_типцены. То-есть вместо "PRICE"=>"ASC" указываем "catalog_PRICE_1"=>"ASC". В старой версии модуля будет работать старый метод. |
![]()
Johnny Po
|
Михаил спасибо за ваши статьи и помощь начинающим.
Как исключить неактивные торг. предложения ? |
![]()
Johnny Po
|
||||
разобрался сам, добавил в фильтр 'ACTIVE' => 'Y'
|
||||
На нем, уже много видеоуроков по 1С-Битрикс. Как одиночные видео так и серии видеоуроков Перейти на канал
Совсем скоро выйдет видеокурс по разработке доски объявлений с мобильным приложением. Подписывайтесь и будьте в курсе: