Ядро D7, примеры, документация

Алексей Будагов,

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

Документация: https://budagov.ru/dev/doc/ и https://dev.1c-bitrix.ru/api_d7/.
Обучающий курс https://dev.1c-bitrix.ru/learning/.

Пара примеров:

Главный модуль

Подключить модуль:

\Bitrix\Main\Loader::includeModule('iblock');

Подключить языковые файлы

\Bitrix\Main\Localization\Loc::getMessage('UPDATE_DATE_TEXT');

Подключить js, css в шаблоне

\Bitrix\Main\Page\Asset::getInstance()->addCss("/path/to/style.css");  
\Bitrix\Main\Page\Asset::getInstance()->addJs("/path/to/script.js");  

Получить настройку модуля:

$option = \Bitrix\Main\Config\Option::get('main', 'rating_normalization_type');

Запись в лог и время выполнения

use Bitrix\Main\Diag\Debug;
Debug::dumpToFile($arResult);

Debug::startTimeLabel("catalogFilter"); 
#code
Debug::endTimeLabel("catalogFilter"); 
Debug::dumpToFile(Debug::getTimeLabels()); 

Вытащить поля пользователя

$dbUser = \Bitrix\Main\UserTable::getList(array(
	'select' => array('ID', 'NAME', 'PERSONAL_PHOTO', 'PERSONAL_WWW'),
	'filter' => array('ID' => $USER->GetID())
));
if ($arUser = $dbUser->fetch()){
	var_dump($arUser);
}

Удобное управление группами пользователя

// Получение групп пользователя 
$dbGroup = \Bitrix\Main\UserGroupTable::getList(array(
	'filter' => array("USER_ID" => 90)
));
$arGroup = $dbGroup->FetchAll();    

// Добавить пользователя в группу
\Bitrix\Main\UserGroupTable::add(array(
	"USER_ID" => $order['USER_ID'],
	"GROUP_ID" => 10,
));
 
// Удалить пользователя из группы  
\Bitrix\Main\UserGroupTable::delete(array(		 
	"USER_ID" => $order['USER_ID'], 
	"GROUP_ID" => 10, 
) );

Кеширование PHP

$cache = Bitrix\Main\Data\Cache::createInstance(); 
if ($cache->initCache($cacheTime, $cacheId, $cacheDir)) { 
    $arResult = $cache->getVars(); 
} elseif ($cache->startDataCache()) { 
    $arResult = array(); 
    if ($isInvalid) { 
        $cache->abortDataCache(); 
    } 
    $cache->endDataCache($arResult); 
} 

Инфоблоки

Получить свойства инфоблока

$dbIblockProps = \Bitrix\Iblock\PropertyTable::getList(array(
	'select' => array('*'),
	'filter' => array('IBLOCK_ID' => $arParams['IBLOCK_ID'])
));
while ($arIblockProps = $dbIblockProps->Fetch()){ 
	var_dump($arIblockProps);
} 

Получить список элементов инфоблока

$dbItems = \Bitrix\Iblock\ElementTable::getList(array(
	'select' => array('ID', 'NAME', 'IBLOCK_ID'),
	'filter' => array('IBLOCK_ID' => $arParams['IBLOCK_ID'])
));
while ($arItem = $dbItems->fetch()){  
	$dbProperty = \CIBlockElement::getProperty(
		$arItem['IBLOCK_ID'],
		$arItem['ID']
	);
	while($arProperty = $dbProperty->Fetch()){  
		$arItem['PROPERTIES'][] = $arProperty;
	}
}

Интернет магазин

Заказ:

// Получаем объект заказа для работы с ним
$order = \Bitrix\Sale\Order::load($orderId); // или по номеру заказа $order = \Bitrix\Sale\Order::loadByAccountNumber($orderNumber);

// Параметры заказа
$order->getFields(); Получает все параметры заказа

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

$order->getField("ID"); // ID заказа
$order->getField("LID"); // ID сайта
$order->getField("ACCOUNT_NUMBER"); // Номер заказа (по шаблону)
$order->getField("TRACKING_NUMBER"); // 
$order->getField("PAY_SYSTEM_ID"); //* ID платежной системы
$order->getField("DELIVERY_ID"); //* ID службы доставки
$order->getField("DATE_INSERT"); // object(DateTime) Время добавления
$order->getField("DATE_UPDATE"); // object(DateTime) Время обновления
$order->getField("PERSON_TYPE_ID"); // ID типа плательщика (физ/юр лицо)
$order->getField("USER_ID"); // ID пользователя
$order->getField("PAYED"); //* Статус оплаты (Y/N)
$order->getField("DATE_PAYED"); //* object(DateTime) Дата оплаты
$order->getField("EMP_PAYED_ID"); // 
$order->getField("DEDUCTED"); //* Отгрузка заказа
$order->getField("DATE_DEDUCTED"); //* object(DateTime) Дата отгрузки
$order->getField("EMP_DEDUCTED_ID"); //*
$order->getField("REASON_UNDO_DEDUCTED"); //* Причина отмены отгрузки
$order->getField("STATUS_ID"); // Статус заказа (F/N/H  т.п., посмотреть можно тут /bitrix/admin/sale_status.php?lang=ru)
$order->getField("DATE_STATUS"); // object(DateTime) Дата изменения статуса
$order->getField("EMP_STATUS_ID"); // 
$order->getField("MARKED"); // 
$order->getField("DATE_MARKED"); // object(DateTime)
$order->getField("EMP_MARKED_ID"); // 
$order->getField("REASON_MARKED"); // 
$order->getField("PRICE_DELIVERY"); //* Стоимость доставки
$order->getField("ALLOW_DELIVERY"); //* Доставка разрешена
$order->getField("DATE_ALLOW_DELIVERY"); //* object(DateTime) Дата разрешения доставки
$order->getField("EMP_ALLOW_DELIVERY_ID"); //*
$order->getField("RESERVED"); // 
$order->getField("PRICE"); // Сумма заказа
$order->getField("CURRENCY"); // Код валюты
$order->getField("DISCOUNT_VALUE"); // Скидка
$order->getField("TAX_VALUE"); // Налог
$order->getField("SUM_PAID"); //  Оплаченная сумма
$order->getField("USER_DESCRIPTION"); // Комментарий покупателя к заказу
$order->getField("PAY_VOUCHER_NUM"); // Номер документа прихода
$order->getField("PAY_VOUCHER_DATE"); // object(DateTime) Дата прихода
$order->getField("ADDITIONAL_INFO"); // Дополнительная информация
$order->getField("COMMENTS"); // Комментарий администратора
$order->getField("COMPANY_ID"); // Офис
$order->getField("CREATED_BY"); // 
$order->getField("RESPONSIBLE_ID"); // Ответственный
$order->getField("STAT_GID"); // 
$order->getField("DATE_PAY_BEFORE"); // 
$order->getField("DATE_BILL"); // 
$order->getField("IS_RECURRING"); // 
$order->getField("RECURRING_ID"); // 
$order->getField("LOCKED_BY"); // ID пользователя, заблокировавший заказ
$order->getField("DATE_LOCK"); // object(DateTime) Дата блокировки
$order->getField("RECOUNT_FLAG"); // 
$order->getField("AFFILIATE_ID"); // 
$order->getField("DELIVERY_DOC_NUM"); // 
$order->getField("DELIVERY_DOC_DATE"); // 
$order->getField("UPDATED_1C"); // 
$order->getField("ORDER_TOPIC"); // 
$order->getField("XML_ID"); // 
$order->getField("ID_1C"); // 
$order->getField("VERSION_1C"); // 
$order->getField("VERSION"); // 
$order->getField("EXTERNAL_ORDER"); // 
$order->getField("STORE_ID"); // 
$order->getField("CANCELED"); // Омена заказа (N/Y)
$order->getField("EMP_CANCELED_ID"); // 
$order->getField("DATE_CANCELED"); // object(DateTime) Дата отмены
$order->getField("REASON_CANCELED"); // Причина отмены
$order->getField("BX_USER_ID"); // 
$order->getField("RUNNING"); // 

$order->setField('PAYED', 'N'); // изменить любой параметр
$order->save(); // и сохраняем

Пример создание заказа

// Массив товаров
$arItems = array(
	array(
		'PRODUCT_ID' => 18,
		'NAME' => 'Товар 1', 
		'PRICE' => 500,
		'CURRENCY' => 'RUB',
		'QUANTITY' => 3.25
	)
);

// Создаем и наполняем корзину
$basket = \Bitrix\Sale\Basket::create(SITE_ID);
foreach ($arItems as $i => $arItem) {
	$basketItem = $basket->createItem("catalog", $arItem['PRODUCT_ID']);
	$basketItem->setFields($arItem);
}

// Создаем заказ и привязываем корзину, перерасчет происходит автоматически
$order = \Bitrix\Sale\Order::create(SITE_ID, $userId);
$order->setPersonTypeId($personTypeId);
$order->setBasket($basket);

// Создание отгрузки
$shipmentCollection = $order->getShipmentCollection();
$shipment = $shipmentCollection->createItem(
	\Bitrix\Sale\Delivery\Services\Manager::getObjectById(1)
);
$shipmentItemCollection = $shipment->getShipmentItemCollection();

/** @var \Bitrix\Sale\BasketItem $basketItem */
foreach ($basket as $basketItem) {
	$item = $shipmentItemCollection->createItem($basketItem);
	$item->setQuantity($basketItem->getQuantity());
}

// Создание оплаты
$paymentCollection = $order->getPaymentCollection();
$payment = $paymentCollection->createItem(
	\Bitrix\Sale\PaySystem\Manager::getObjectById(1)
);
$payment->setField("SUM", $order->getPrice());
$payment->setField("CURRENCY", $order->getCurrency());

// Coхраняем заказ
$result = $order->save();
if (!$result->isSuccess()) {
	//$result->getError();
}

Пример обновление заказа

$order = \Bitrix\Sale\Order::load($orderId);
$order->setField('USER_DESCRIPTION', 'Доставить к подъезду');

// Разрешаем отгрузку
$shipmentCollection = $order->getShipmentCollection();
/** @var \Bitrix\Sale\Shipment $shipment */
foreach ($shipmentCollection as $shipment) {
	if (!$shipment->isSystem()) { // существует системная отгрузка, т.к. товары не могут быть без отгрузки
		$shipment->allowDelivery();
	}
}

// Coхраняем заказ
$result = $order->save();
if (!$result->isSuccess()) {
	//$result->getError();
}

Другие примеры можно поискать по тегу примеры d7

Опубликовано 16 Марта 2016 | Обновлено 19 Марта 2018
документация, примеры d7, разработчику

Возврат к списку

Комментарии
Евгений
14 Фев 2018
Пипец. Я так понимаю получить заказ в D7 вообще невозможно. Где не ищешь, только "давайте создадим заказ" или "создание заказа". Видимо основная цель всех инет магазинов это создать заказ. Прочитать его потом вовсе не обязательно.
Алексей Будагов
Алексей Будагов
15 Фев 2018
Евгений, посмотрите последний блок "Обновление заказа". Самая первая строка $order = \Bitrix\Sale\Order::load($orderId); это и есть получение заказа на D7, далее уже через этот объект можно поменять/получить все возможные параметры, в том числе и доставку с оплатой.
Andrey
17 Янв 2018
Здравствуйте.
Как изменить статус заказа на "Выполнен" на d7?
Алексей Будагов
Алексей Будагов
17 Янв 2018
Andrey, попробуйте так
получаем заказ $order = \Bitrix\Sale\Order::load($orderId); //$orderId - id заказа
ставим статус $order->setField('STATUS_ID', 'F'); // F - заказ выполнен
сохраняем $order->save();
Иван
9 Авг 2017
Здравствуйте, как можно из не сохраненного еще заказа получить информацию о товарах?
Алексей Будагов
Алексей Будагов
9 Авг 2017
Иван, необходимо получить данные о корзине.
Новым методом $basket = $order->getBasket(); или старым, если заказ уже создан $dbBasket = CSaleBasket::GetList(Array("ID" => "ASC"), Array("ORDER_ID" => $orderId));