moovix

1С-Битрикс: Вывод торговых предложений в списке товаров

Moovix » Блог » 1С-Битрикс: Вывод торговых предложений в списке товаров
Если у товара несколько торговых предложений и у каждого предложения разные цены, иногда требуется вывести минимальную цену торговых предложений, отсортировав ее из всех торговых предложений. Можно воспользоваться API Битрикс обратившись к CCatalogSKU::GetInfoByProductIBlock Сделать это просто, нужно добавить вот такой код в catalog.section:
Если у товара несколько торговых предложений и у каждого предложения разные цены, иногда требуется вывести минимальную цену торговых предложений, отсортировав ее из всех торговых предложений. Можно воспользоваться 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 "от " . $ar_price["PRICE"] . " руб.";
                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 "от " . $ar_price["PRICE"] . " руб.";
                    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">
                            /
                            <? foreach ($arOffer["DISPLAY_PROPERTIES"] as $pid => $arProperty) : ?>
                                <?
                                if (is_array($arProperty["DISPLAY_VALUE"]))
                                    echo implode(" / ", $arProperty["DISPLAY_VALUE"]);
                                else
                                    echo $arProperty["DISPLAY_VALUE"];
                                ?>
                                кг.
                            <? 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 : ?>
                        <?= $arPrice["PRINT_VALUE"] ?>
                    <? endif; ?>
                    <noindex>
                        <a href="<? echo $arElement["ADD_URL"] ?>" rel="nofollow">В корзину</a>
                    </noindex>
                </div>
            <? endif; ?>
        <? endforeach; ?>
    <? endif ?>
				
			

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

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

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

Скачать

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Moovix » Блог » 1С-Битрикс: Вывод торговых предложений в списке товаров

Есть вопрос? мы онлайн

Есть проект? Заполните бриф.

top