Вывести минимальную цену торговых предложений в Битрикс

7942  |  7

Если у товара несколько торговых предложений и у каждого предложения разные цены, иногда требуется вывести минимальную цену торговых предложений, отсортировав ее из всех торговых предложений. Можно воспользоваться 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("&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?>

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

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

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

Скачать

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

Расскажи друзьям-то:
Уважаемый читатель! В связи с участившимся спамом в комментариях, возможность писать доступна только для зарегистрированных пользователей
Зарегистрироваться Войти Напомнить пароль
Или войти через социальную сеть:
Александр Христич
Михаил, а как работает скидка на торговые предложения, и если на них скидка тоже действует, то как вывести старую и новую(со скидкой) цену?
Спасибо большое!
Михаил Базаров
Цитата
Александр Христич написал:
Михаил, а как работает скидка на торговые предложения, и если на них скидка тоже действует, то как вывести старую и новую(со скидкой) цену?
Спасибо большое!
возмите вывод цен предложений из старых шаблонов битрикс. Вот тут https://camouf.ru/blog-note/918/
Александр Христич
Цитата
Михаил Базаров написал:
Цитата
Александр Христич написал:
Михаил, а как работает скидка на торговые предложения, и если на них скидка тоже действует, то как вывести старую и новую(со скидкой) цену?
Спасибо большое!
возмите вывод цен предложений из старых шаблонов битрикс. Вот тут https://camouf.ru/blog-note/918/
Огромное спасибо! Когда появляются какие-то проблемы, обращаюсь в первую очередь к вам, спасибо за все то время, что вы уделяете совершенно бесплатной консультации.
lexusus
Добрый день,

Подскажите пожалуйста как вывести название Типа цены, например имеется несколько видов цен (Оптовая, Оптовая - 10% и тд). Каждой группе клиентов присвоен свой тип. Вывыести нужно в списке каталога перед ценой.

Спасибо.
Михаил Базаров
Цитата
lexusus пишет:
GetCatalogProductPrice
Сейчас так сходу не подскажу. Вот тут посмотрите http://dev.1c-bitrix.ru/api_help/catalog/price.php первая функция
lexusus
Цитата
Михаил Базаров пишет:
Цитата
lexusus пишет:
GetCatalogProductPrice
Сейчас так сходу не подскажу. Вот тут посмотрите http://dev.1c-bitrix.ru/api_help/catalog/price.php первая функция
информация есть в в результирующем массиве, только не понял как вывести

Код
 ["PRICES"]=>
      array(1) {
        ["Опт скидка 5%"]=>
        array(32) {
          ["ORIG_VALUE_NOVAT"]=>
          float(33.008474576271)
          ["VALUE_NOVAT"]=>
          float(2374.0058008475)
          ["PRINT_VALUE_NOVAT"]=>
          string(13) "2 374.01 руб."
          ["ORIG_VALUE_VAT"]=>
          string(5) "38.95"
icon_smile.png (1.63 КБ)
Марк Соколов
Не подскажите как вывести просто информационно, без привязки к корзине не только минимальную цену торговых предложений, но и розничную для оптового покупателя, т..к существует две цены, а в дефолтном шаблоне показывается только минимальная для своей группы пользователей, мысли натолкнули на GetCatalogProductPrice но не дочерпал)) Поможете, дело еще в том, что простым переключением веса товара (это свойства торг предложений) изменяется только минимальная (старая и новая цена - если есть скидка)

© 2011—2016 Частный вебмастер: ИП Базаров, ОГРНИП: 315784700173692. Работает на 1С-Битрикс.
Копирование материалов запрещено: "ГК РФ, часть 4, раздел VII: Права на результаты интеллектуальной деятельности".

Информация размещенная на сайте, не является публичной офертой. Политика конфеденциальности
x
Как к Вам обращаться? *
Ваша электронная почта: *
Доп. материалы (логотип, тех. задание):
 
Обзор
Текст сообщения: