D7 Выборка товаров со свойствами из корзины пользователя

$basket = \Bitrix\Sale\Internals\BasketTable::getList(array(
    'select' => ["*", "PROPS.CODE", "PROPS.VALUE"],
    'filter' => ['FUSER_ID' => \Bitrix\Sale\Fuser::getId(), "ORDER_ID" => 'null'],
    'runtime' => [
        new \Bitrix\Main\ORM\Fields\Relations\OneToMany(
            'PROPS',
            '\Bitrix\Sale\Internals\BasketPropertyTable',
            'BASKET'
        ),
    ]
))->fetchCollection();
foreach($basket as $itemObj) {
    $arItem = $item->collectValues();
    /**
     * @var $obPropsCollection \Bitrix\Main\ORM\Objectify\Collection - коллекция всех свойств
     */
    if ($obPropsCollection = $itemObj->get("PROPS")->getAll()) {
        foreach ($obPropsCollection as $propObj) {
            $arItem["PROPS"][$propObj->getCode()] = $propObj->collectValues();
        }
    }
    $basketItems[$PRODUCT_ID][$arItem["ID"]] = $arItem;
}

Создание обработчика доставки для 1С-Битрикс (метод 2012 года)

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

Разработчики, которые делают проекты на Битрикс, хорошо знакомы с двумя типами служб доставки в этой CMS — это Настраиваемые и Автоматизированные. В этой статье мы посмотрим как сделать свой Автоматизированный обработчик доставки и даже сделаем простой пример такого обработчика.

Об автоматизированном обработчике доставки

Все предустановленные обработчики располагаются в папке /bitrix/modules/sale/lang/ru/delivery/ . Свои обработчики следует располагать в папке /bitrix/php_interface/include/sale_delivery/ (этот путь можно изменить в свойствах модуля интернет-магазина). Обработчик представляет собой класс определенной структуры со строкой подключения обработчика доставки по событию onSaleDeliveryHandlersBuildList .

Класс обработчика доставки должен иметь ряд методов, типы действий которых, описываются в методе Init класса.

Эти методы такие:

1. Init — происходит инициализации основных полей.

2. DBGETSETTINGS  — метод считывания значений параметров.

3. DBSETSETTINGS  — метод установки значений параметров.

4. GETCONFIG — определение конфигурации настроек (их можно разбить на табы).

5. COMPABILITY — проверка совместимости профилей обработчика с заказом.

6. CALCULATOR — расчет стоимости доставки.

Также должны быть заданы поля:

1. SID  —  Уникальный строковой идентификатор обработчика.
2. NAME —  Название обработчика.
3. DESCRIPTION — Текстовое описание обработчика
4. DESCRIPTION_INNER — Внутреннее описание обработчика, отображаемое при конфигурации обработчика в Панели Управления.
5. BASE_CURRENCY — Идентификатор базовой валюты обработчика
6. HANDLER — Путь к файлу обработчика. Нужен для корректного автоматического копирования обработчика (ещё не реализовано). В подавляющем большинстве случаев достаточно значения __FILE__

Также должны быть заданы профили доставки. Хотя бы один.

Простейший обработчик доставки.

Не будем мудрить — сделаем обработчик, который ничего не считает и всегда выдает цену одну и ту же, например 200 руб. В нем будет всего один профиль — без ограничений. В настройки вынесем цену доставки.

class CDeliveryPlain
{

    /**
     * Описние обработчика
     */
    function Init()
    {
        //настройки
        return array(
            "SID"                     => "Plain",  // Идентификатор службы доставки
            "NAME"                     => "Пример обработчика службы доставки",
            "DESCRIPTION"             => "Описание его для клиентов сайта",
            "DESCRIPTION_INNER"     => "Описание для администраторов сайта",
            "BASE_CURRENCY"         => "RUR",

            "HANDLER"                 => __FILE__,

            /* Определение методов */
            "DBGETSETTINGS"         => array("CDeliveryPlain", "GetSettings"),
            "DBSETSETTINGS"         => array("CDeliveryPlain", "SetSettings"),
            "GETCONFIG"             => array("CDeliveryPlain", "GetConfig"),

            "COMPABILITY"             => array("CDeliveryPlain", "Compability"),
            "CALCULATOR"             => array("CDeliveryPlain", "Calculate"),

            /* Список профилей */
            "PROFILES" => array(
                "all" => array(
                    "TITLE" => "Без ограничений",
                    "DESCRIPTION" => "Профиль доставки без каких-либо ограничений",

                    "RESTRICTIONS_WEIGHT" => array(0),
                    "RESTRICTIONS_SUM" => array(0),
                ),
            )
        );
    }

    /* Установка параметров */
    function SetSettings($arSettings)
    {
        foreach ($arSettings as $key => $value) {
            if (strlen($value) > 0)
                $arSettings[$key] = doubleval($value);
            else
                unset($arSettings[$key]);
        }

        return serialize($arSettings);
    }

    /* Запрос параметров */
    function GetSettings($strSettings)
    {
        return unserialize($strSettings);
    }

    /* Запрос конфигурации службы доставки */
    function GetConfig()
    {
        $arConfig = array(
            "CONFIG_GROUPS" => array(
                "all" => "Параметры",
            ),

            "CONFIG" => array(
                "DELIVERY_PRICE" => array(
                    "TYPE" => "STRING",
                    "DEFAULT" => "200",
                    "TITLE" => "Стоимость доставки",
                    "GROUP" => "all"
                )
            ),
        );
        return $arConfig;
    }

    /* Проверка соответствия профиля доставки заказу */
    function Compability($arOrder, $arConfig)
    {
        return array("all");
    }

    /* Калькуляция стоимости доставки*/
    function Calculate($profile, $arConfig, $arOrder, $STEP, $TEMP = false)
    {
        return array(
            "RESULT" => "OK",
            "VALUE" => $arConfig["DELIVERY_PRICE"]
        );
    }
}

AddEventHandler("sale", "onSaleDeliveryHandlersBuildList", array("CDeliveryPlain", "Init"));


Сохраним этот обработчик в файле /bitrix/php_interface/include/sale_delivery/delivery_plain.php и посмотрим в список автоматизированных обработчиков. Если мы видим его в списке, то значит все сделано правильно. Нам осталось его активировать и проверить работу.

Информация взята с http://blog.sokov.org/sozdanie-obrabotchika-dostavki-dlya-1s-bitriks/