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

Документация: 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);
}

Пользовательские поля

$dbUserFields = \Bitrix\Main\UserFieldTable::getList(array(
	'filter' => array('ENTITY_ID' => 'IBLOCK_'.$iblockId.'_SECTION')
));
while ($arUserField = $dbUserFields->fetch()) {
	if ($arUserField["USER_TYPE_ID"] == 'enumeration') {
		$dbEnums = CUserFieldEnum::GetList(
			array(),
			array('USER_FIELD_ID' => $arUserField['ID'])
		);
		while ($arEnum = $dbEnums->GetNext()) {
			$arUserField['ENUMS'][$arEnum['XML_ID']] = $arEnum;
		}
	}
	$arResult['USER_FIELDS'][$arUserField["FIELD_NAME"]] = $arUserField;
}

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

// Получение групп пользователя 
$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();

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();

foreach ($shipmentCollection as $shipment) {
	if (!$shipment->isSystem()) { // существует системная отгрузка, т.к. товары не могут быть без отгрузки
		$shipment->allowDelivery();
	}
}

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

Источник: https://blog.budagov.ru/yadro-d7-primery-dokumentatsiya/