Телеграм: @camouf_ru Почта: mihail@bazarow.ru

Информация о заказах и содержимое корзины текущего пользователя.

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

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

Информация о товарах в корзине пользователя

Этот код получает и выводит практически всю информацию, о товарах, которые находятся в корзине текущего пользователя

if (CModule::IncludeModule("sale"))
//Товары в корзине
$arID = array();
$arBasketItems = array();
$dbBasketItems = CSaleBasket::GetList(
    array(
        "NAME" => "ASC",
        "ID" => "ASC"
    ),
    array(
        "FUSER_ID" => CSaleBasket::GetBasketUserID(),
        "LID" => SITE_ID,
        "ORDER_ID" => "NULL"
    ),
    false,
    false,
    array("ID", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "QUANTITY", "PRODUCT_PROVIDER_CLASS")
);
while ($arItems = $dbBasketItems->Fetch()) {
    if ('' != $arItems['PRODUCT_PROVIDER_CLASS'] || '' != $arItems["CALLBACK_FUNC"]) {
        CSaleBasket::UpdatePrice($arItems["ID"],
            $arItems["CALLBACK_FUNC"],
            $arItems["MODULE"],
            $arItems["PRODUCT_ID"],
            $arItems["QUANTITY"],
            "N",
            $arItems["PRODUCT_PROVIDER_CLASS"]
        );
        $arID[] = $arItems["ID"];
    }
}

Пример применения: В карточке товара, нам нужно заменить кнопку "В корзину" на кнопку или ссылку "Уже в корзине"

Размещаем код, представленный выше в result_midifier.php или прямо вверху template.php (в result_midifier.php конечно правильнее)

Находим в templale.php кнопку или ссылку "В корзину" и просто применяем к ней следующий код:

if (!empty($arID)) {
    $dbBasketItems = CSaleBasket::GetList(
        array(
             "NAME" => "ASC",
             "ID" => "ASC"
        ),
        array(
            "ID" => $arID,
            "ORDER_ID" => "NULL"
        ),
       false,
       false,
             array("ID", "CALLBACK_FUNC", "MODULE", "DATE_INSERT", "PRODUCT_ID", "QUANTITY", "DELAY", "CAN_BUY", "PRICE", "WEIGHT", "PRODUCT_PROVIDER_CLASS", "NAME")
       );
       while ($arItems = $dbBasketItems->Fetch()) {
            $arBasketItems[] = $arItems;
            $offerID = $arOffer['ID'];
            $inBasketID = $arItems['PRODUCT_ID'];
        ?>
        <? if ($inBasketID == $offerID){ ?>
            <a href="/personal/order/">Уже в корзине</a>
        <?}else{?>
            <a href="<? echo $arOffer["BUY_URL"] ?>">В корзину</a>
        <?}
}?>                            

Небольшие пояснения:
— Сначала получаем всю информацию о корзине пользователя;
$offerID = $arOffer['ID'] и $inBasketID = $arItems['PRODUCT_ID'] присваиваем переменные для товара текущего и товара в корзине;
— Если $inBasketID == $offerID индетификаторы текущего товара и товара в корзине совпадают, то выводим ссылку "Уже в корзине", иначе выводим "В корзину"

Вот так мы проверили, наличие товара в корзине пользователя. Само собой, можете прикручивать AJAX и прочие красивости. Это всего лишь пример.

Информация о заказах пользователя

Следующий пример дает возможность получить все информацию о заказах текущего пользователя. Размещать, также в result_midifier.php

if (CModule::IncludeModule("sale"))
$arFilter = Array(
        "USER_ID" => $USER->GetID(),
    );
$db_sales = CSaleOrder::GetList(array(), $arFilter);
while ($ar_sales = $db_sales->Fetch())
{
    echo '<pre>'; print_r($ar_sales); echo '</pre>';
}

В выводе print_r($ar_sales) вы получите вообще все данные о заказе, использовать можете любые из них.

Пример применения: Если у пользователя уже есть не оплаченные товары в заказе. Внимание! именно не оплаченные, а не вообще заказы. Мы можем в карточках товаров вывести ему, вместо кнопки "В корзину", кнопку "У вас есть не оплаченные заказы"

Как и в примере выше, размещаем код в result_modifier.php. В карточке товара, находим кнопку "В корзину" и применяем к ней:

<?if ($ar_sales['PAYED'] == 'N') {?>
	У вас есть не оплаченные заказы
<?}else{?>
	<a href="<? echo $arOffer["BUY_URL"]?>">В корзину</a>
<?}?>

Пояснения:

  • Мы проверили наличие товара в заказах со статусом $ar_sales['ОПЛАЧЕН'] == 'НЕТ';
  • И вывели соответствующую надпись
  • Иначе, если таких (не оплаченных) заказов нет. То выводим кнопку "В корзину"

Само собой, совсем прятать возможность купить товар- не хорошо. Это просто пример. Можете оставить кнопку но при этом и напомнить о наличии не оплаченных товаров, прямо в карточке.

Можете вывести еще и названия не оплаченных товаров, как бы обратить внимание пользователя! И более того, можете скомбинировать с примером выше. Выводить, что данный товар (проверка на наличие в корзине) есть у вас в заказе и не оплачен (проверка на заказ)

Рустам Кулиев 24.05.2019
&rt;  что за символ ? произошло в коде экранирование у Вас  
Рустам Кулиев 24.05.2019
+ не хватает "a" сразу перед открывающим тегом <a
в случае else  
Рустам Кулиев 24.05.2019
весь код отдает ошибку синтаксиса касательно


<?php if (!empty($arID)) {
               $dbBasketItems = CSaleBasket::GetList(
                   array("NAME" => "ASC","ID" => "ASC" ;) ,
                   array("ID" => $arID,"ORDER_ID" => "NULL" ;) ,
                   false,
                   false,
                   array("ID", "CALLBACK_FUNC", "MODULE", "DATE_INSERT", "PRODUCT_ID", "QUANTITY", "DELAY", "CAN_BUY", "PRICE", "WEIGHT", "PRODUCT_PROVIDER_CLASS", "NAME" ;) );
                   while ($arItems = $dbBasketItems->Fetch()) {
                       $arBasketItems[] = $arItems;
                       $offerID = $arOffer['ID'];
                       $inBasketID = $arItems['PRODUCT_ID'];
                         if ($inBasketID == $offerID) { ?>
                           Уже в корзине
                         <?php } else { ?>
                           ">В корзину
           <?php } } ?>
Михаил Базаров 24.05.2019
Цитата
Рустам Кулиев написал:
весь код отдает ошибку синтаксиса касательно


<?php if (!empty($arID)) {

Можете подсказать текст ошибки, на какой строчке, что ему не нравится? Сейчас проверить не где, а глазами вроде бы не вижу- куда могла закрасться
Кирилл Зорин 17.08.2020
Цитата
Михаил Базаров пишет:
[QUOTE][URL=/club/user/5568/]Рустам Кулиев[/URL] написал:
весь код отдает ошибку синтаксиса касательно


[/QUOTE]
Можете подсказать текст ошибки, на какой строчке, что ему не нравится? Сейчас проверить не где, а глазами вроде бы не вижу- куда могла закрасться
не хватает "}" в конце

Записная книжка разработчика

Примерно с 2013-го года пишу заметки по разработке сайтов на Битрикс.
Вы можете задавать уточняющие вопросы в комментариях- отвечаю или дополняю заметки по возможности.

Умный фильтр только на последнем уровне разделов каталога. Просмотров: 10458 Если в разработаываемом магазине или в принципе в каталоге на Битрикс, вы выводите умный ф... Как вывести картинки к разделам на базе _ext меню Просмотров: 7069 Просто для эстетической красоты, нужно вывести в меню разделов сайта картинки или иконки. ... Вывести новости из конкретного раздела инфоблока Битрикс Просмотров: 53388 Бывает что требуется вывести конкретные новости или статьи из одного раздела инфоблока в Б... Спойлер в списке новостей Битрикс Просмотров: 11255 Иногда нужно сделать спойлеры в копонентах Битрикс, в основном конечно, имеет смысл при оч... Снять ограничение на количество символов в комментарии к заказу магаз... Просмотров: 11507 Как многим известно, в интернет-магазине на Битрикс имеется ограничение на количество симв... Очистка корзины в 1С-Битрикс одним нажатием Просмотров: 27711 В стандартной корзине Битрикс не хватает кнопки для полной очистки корзины одним нажатием... Дополнительные опции/услуги, добавляемые в корзину, в карточке товаро... Просмотров: 279 Задача: в детальной карточке товара сделать возможность добавления услуги или опции, при д... Мобильные версии страниц и поисковые системы Просмотров: 5826 Согласно требования поисковых систем: Яндекс и Google, в случае если у вашего сайта имеетс... Объединить отдельные поля ФИО в одно свойство при оформлении заказа. Просмотров: 855 Пользователь, при оформлении заказа, заполняет три отдельных поля с фамилией, именем и отч... Получить множественное пользовательское поле раздела. Значения множес... Просмотров: 342 Задача: У разделов инфоблока есть множественное поле типа список. Зная ID раздела, нужно п... Увидеть файл заказов который передаст Битрикс в 1С Просмотров: 23269 Для диагностики обмена заказов, интернет-магазина на 1С Битрикс с 1С Управление Торговлей,... Связанные элементы в карточке товара, с помощью catalog.section Просмотров: 13958 Достаточно часто, при разработке магазинов на битрикс, требуется выводить связанные элемен... Кастомизация компонента восстановления пароля bitrix:system.auth.forg... Просмотров: 24736 Достаточно часто спрашивают как кастомизировать компонент восстановления пароля пользовате... Вывести разделы инфоблока в которых находится элемент Битрикс Просмотров: 15983 Если нужно в карточке товара или новости, вывести структуру разделов в котором находится э... Моментальная фильтрация на AJAX в умном фильтре 1С-Битрикс Просмотров: 24578 При штатной установке, интернет-магазина на 1С Битрикс, умный фильтр по товарам, показывае... Вывести общее количество товаров в шаблоне корзины 1С-Битрикс Просмотров: 5685 Задача: вывести общее количество товаров в корзине (именно количество единиц товара, а не ... Показ страницы сайта в боковом слайдере, на примере всплывающей формы... Просмотров: 1831 Если вы хотите сделать подгрузку любой страницы сайта в боковой слайдер, для этого в битри... Глобальные фильтры на всякие случаи жизни Просмотров: 44461 Глобальный фильтр, нужен чаще всего, для вывода определенных элементов, из общего массива... Данные о заказе текущего пользователя Просмотров: 12868 Иногда нужно получить данные о заказе текущего пользователя. Не через компонент, а непосре... Постраничная навигация в списке разделов Битрикс- catalog.section.lis... Просмотров: 8660 Если в магазине очень много разделов и хочется вывести их с постраничной навигацией: можно...