Битрикс набор функций

Наверно, самый популярный метод — список элементов


$res = CIBlockElement::GetList(
  Array("SORT"=>"DESC") , // $arOrder 
  array('IBLOCK_ID'=>55), // $arFilter 
  false, // $arGroupBy 
  Array("nTopCount"=>10), // $arNavStartParams
        array('ID' , 'NAME') // arSelectFields
); 
while($ob = $res->GetNext(true, false)){
    print_r($ob );
}

Поля элемента


$res = CIBlockElement::GetByID($id);
$obRes = $res->GetNextElement();
if($obRes){
  $ar_res = $obRes->GetFields();
}

Тоже самое через массив


$res = CIBlockElement::GetByID($id);
$obRes = $res->GetNext(true, false);
var_dump($obRes)

Свойства элемента


$res = CIBlockElement::GetByID($id);
$obRes = $res->GetNextElement();
if($obRes){
  $ar_res = $obRes->GetProperties();
}

1 св-во 1-го элемента

	$res = CIBlockElement::GetProperty($arParams['IBLOCK_ID'], $item['ID'], Array(), Array("CODE" => "PICTURE"));
	$row = $res->GetNext();
// если не задать CODE выдаст все св-ва.

Несколько св-в 1-го элемента

$IBLOCK_ID = '2'; 
$arFilter = ['SECTION_ID' => 150];
$res = CIBlockElement::GetPropertyValues($IBLOCK_ID, $arFilter, false, array('ID' => [
432, // тип список
361, // тип файл множественное
526  // строка
]));
while ($row = $res->GetNext(true, false)) {
	print_r($row);
}
// выведет
Array
(
    [IBLOCK_ELEMENT_ID] => 28736
    [361] => Array
        (
            [0] => 3557597
            [1] => 3557598
            [2] => 3557599
            [3] => 3557600
            [4] => 3557601
        )

    [432] => 2643
    [526] => 10
)

Обновить св-во

$ibp = new CIBlockProperty;
$arFields = Array(
  "NAME" => "Цвет",
  "ACTIVE" => "Y",
  "SORT" => "100",
  "CODE" => "color",
  "PROPERTY_TYPE" => "L",
  "IBLOCK_ID" => 11
  );
if(!$ibp->Update($property_id, ['CODE' => $arFields]))
     echo $ibp->LAST_ERROR; 

Добавить элемент инфоблока

CModule::IncludeModule('iblock'); 
$el = new CIBlockElement;
// $PROP = array();
// $PROP[12] = "Белый";  // свойству с кодом 12 присваиваем значение "Белый"
// $PROP[3] = 38;        // свойству с кодом 3 присваиваем значение 38

$arLoadProductArray = Array(
  "MODIFIED_BY"    => $USER->GetID(), // элемент изменен текущим пользователем
  "IBLOCK_SECTION_ID" => false,          // элемент лежит в корне раздела
  "IBLOCK_ID"      => 32,
  // "PROPERTY_VALUES"=> $PROP,
  "NAME"           => $_POST['Title'],
  "ACTIVE"         => "Y",            // активен
  "PREVIEW_TEXT"   => $_POST['Text'],
  "DETAIL_TEXT"    => $_POST['Text'],
  // "DETAIL_PICTURE" => CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]."/image.gif")
  );
  
if($PRODUCT_ID = $el->Add($arLoadProductArray))
  echo "New ID: ".$PRODUCT_ID;
else
  echo "Error: ".$el->LAST_ERROR;

Обновить значение поля

CIBlockElement::Update подходит больше для обновления полей, а не св-в, т.к. если указать св-ва, надо передавать их всех, иначе они будут удалены. Для изменения свойств используй CIBlockElement::SetPropertyValuesEx (см. ниже).

Если массив PROPERTY_VALUES задан, то он должен содержать полный набор значений свойств для данного элемента, т.е. если в нем будет отсутствовать одно из свойств, то все его значения для данного элемента

будут удалены

.

	$res = CIBlockElement::GetList('', ['IBLOCK_ID' => 16], false, false, ['ID', 'PROPERTY_STAR_RATE']);
	$el = new CIBlockElement;
	while ($row = $res->GetNext()) {
	    $el->Update($row['ID'], [
		'DETAIL_PICTURE' => 123
	     ]);
	}

Обновить значение св-ва.

	$res = CIBlockElement::GetList(["SORT" => "ASC"], ["IBLOCK_ID" => [2,3], "IBLOCK_TYPE" => 'catalog'], false, 
		false,
		['ID', 'IBLOCK_ID']);
	$el = new CIBlockElement;
	while ($row = $res->GetNext()) {
// нестатический метод
// При обновлении нужно задать все свойства элемента, иначе те, которые не заданы, будут сброшены.
		$el->SetPropertyValues($row['ID'], $row['IBLOCK_ID'], '', 'REAL_BUY');
	}

Получить значения множественного св-ва

$enum = CIBlockProperty::GetPropertyEnum('COLOR',Array(), Array("IBLOCK_ID"=>8));
while($prop = $enum->GetNext())
	$colors[] = strtolower($prop['VALUE']);

Обновить значение св-ва (Типа список)

// Находим id значения    
$property_enums = CIBlockPropertyEnum::GetList(Array("DEF" => "DESC", "SORT" => "ASC"), Array("IBLOCK_ID" => $arElement["IBLOCK_ID"], "CODE" => "ARCHIVE"));
               
while($enum_fields = $property_enums->GetNext()) {
           /* Если значение равно "Да" */
           if ($enum_fields["VALUE"] == 'Да') {
              $arPropertyArchive = Array(
                 "VES" => $enum_fields["ID"],
              );
              break;
           }
        }
// возвращает Null.
CIBlockElement::SetPropertyValuesEx($element['ID'], $element['IBLOCK_ID'], $arPropertyArchive, ['DoNotValidateLists']);

Добавить значение в св-во типа Список (множественное)

       $ibpenum = new CIBlockPropertyEnum;
    $PropID = $ibpenum->Add(Array('PROPERTY_ID'=> 396, 'VALUE'=> 'какое то значение'));

Обновить множественные значения типа Файл

$arFile = [];
foreach ($pic as $k => $p) {
 $arFile[] = array("VALUE" => CFile::MakeFileArray(__DIR__."/common_img/$p"),"DESCRIPTION"=>"");
}
CIBlockElement::SetPropertyValuesEx($ob['ID'], $ob['IBLOCK_ID'], ['MORE_PHOTO' =>   $arFile    ]);

Удалить множественные значения типа Файл

CIBlockElement::SetPropertyValuesEx($ob['ID'], $ob['IBLOCK_ID'], ['MORE_PHOTO' =>  Array ("VALUE" => array("del" => "Y"))  ]);

Добавить множественные значения (без перезаписи)

$arFile[] = array("VALUE" => CFile::MakeFileArray(__DIR__."/common_img/file.jpg"),"DESCRIPTION"=>"");
CIBlockElement::SetPropertyValueCode($ob['ID'], 'MORE_PHOTO', $arFile);

Обновить значение типа Привязка к элементу

$PROPERTY_CODE = 'MATERIAL';
$value = '2'; // id элемента инфоблока
CIBlockElement::SetPropertyValuesEx($elementID, $iblockID, array($PROPERTY_CODE => $value));

Добавить множественное значение типа Строка

$arProperties2[0] = array( "VALUE" => "top: 7%;left: 1%;", "DESCRIPTION"=>"описание значения");
CIblockElement::SetPropertyValueCode($el_id, 'ADVANTAGES_POSITION', $arProperties);

ID товара по ID торгового предложения .


$mxResult = CCatalogSku::GetProductInfo($id);
// output
Array
(
    [ID] => 66372   // parent id
    [IBLOCK_ID] => 23
    [OFFER_IBLOCK_ID] => 24
    [SKU_PROPERTY_ID] => 468
)

Ссылка на оффер

$arResult['ITEMS'][$key1]['DETAIL_PAGE_URL'] = CIBlockElement::GetByID($sku['ID'])->GetNext()['DETAIL_PAGE_URL'].'?offer='.$arItem['ID'];

торговые предложения товара

$res_1 = CCatalogSKU::getOffersList($element['ID'], $element['IBLOCK_ID'], [], ['ID'], []);
// выдаст
Array
(
    [59936] => Array
        (
            [61956] => Array
                (
                    [ID] => 61956
                    [IBLOCK_ID] => 24
                    [PARENT_ID] => 59936
                )

            [61957] => Array
                (
                    [ID] => 61957
                    [IBLOCK_ID] => 24
                    [PARENT_ID] => 59936
                )

        )

)

инфо раздела


$section = CIBlockSection::GetList(Array(), array('CODE' => $arParams['SECTION_CODE']) , false);
$section = $section->GetNext();

Id родительского раздела

$res = CIBlockSection::GetByID($arParams["SECTION_ID"]);
$ar_res = $res->GetNext();
echo $ar_res['IBLOCK_SECTION_ID '];

Дочерние разделы

// фильтр SECTION_ID, по коду раздела-родителя
$arFilter = Array('SECTION_ID' => 123);
$db_list = CIBlockSection::GetList(Array(), $arFilter, true);
  while($ar_result = $db_list->GetNext(true, false)){
}

Все поля и св-ва элементов


$res = CIBlockElement::GetList(
 Array("SORT"=>"ASC"), // arOrder
 Array(
     "IBLOCK_ID"=>IntVal($arParams['IBLOCK_ID']) ,
     "PROPERTY_UF_NAME" => $arParams['UF_NAME'] ,
     "ACTIVE" => "Y" 
     ), // arFilter
 false, // arGroupBy
 false, // arNavStartParams
 ['*'] // arSelectFields
);
$i = 0;
while($ob = $res->GetNextElement(true, false)){ 
    $arResult["ITEMS"][$i]['fields'] = $ob->GetFields();  
    $arResult["ITEMS"][$i]['props'] = $ob->GetProperties();  
    $i++;
}

Фильтрация в компоненте по свойству (ключевое слово PROPERTY_…)


$GLOBALS['arFilter1'] = ['PROPERTY_TOVAR_DNJA' => 'Да'];
$APPLICATION->IncludeComponent(
	"bitrix:catalog.top", 
	"monopoly", 
	array(
	"FILTER_NAME" => "arFilter1",
...
// для поля типа Список в значение предаем id
$arrFilterSale2 = [    'PROPERTY_NOVINKA' => 2276    ]; 
// или значение
$arrFilterSale2 = [    'PROPERTY_NOVINKA_VALUE' => 'Да'    ]; 

Добавить в корзину товар.

use \Bitrix\Main\Loader;
Loader::includeModule('catalog');
Add2BasketByProductID($id, $quantity)

Цены товара

// со скидками
CCatalogProduct::GetOptimalPrice($element_id, $quantity);
// без скидок
CPrice::GetBasePrice($el_id);

Добавить товар в корзину с нулевой ценой

$prod = CCatalogProduct::GetByID($id);
$price = CPrice::GetBasePrice($id);
if($price==false)$price['PRICE'] = 0;
  $arFields = array(
    "PRODUCT_ID" => $prod['ID'],
    // "PRODUCT_PRICE_ID" => 0,
    "PRICE" => $price['PRICE'],
    "CURRENCY" => "RUB",
    "QUANTITY" => $q,
    "LID" => SITE_ID,
    "CAN_BUY" => "Y",
    "NAME" => $name,  );
$res =   CSaleBasket::Add($arFields);

Товары в корзине


$arBasketItems = array();

$dbBasketItems = CSaleBasket::GetList(
        array(
                "NAME" => "ASC",
                "ID" => "ASC"
            ),
        array(
                "FUSER_ID" => CSaleBasket::GetBasketUserID(),
                "LID" => SITE_ID,
                "ORDER_ID" => "NULL",
                "CAN_BUY" => "Y"
            ),
        false,
        false,
        array("ID", "CALLBACK_FUNC", "MODULE", 
              "PRODUCT_ID", "QUANTITY", "DELAY", 
              "CAN_BUY", "PRICE", "WEIGHT")
    );
while ($arItem = $dbBasketItems->Fetch())
{
    $arBasketItems[] = $arItem;
}

Удалить товар


if(CIBlock::GetPermission($IBLOCK_ID)>='W')
{
    $DB->StartTransaction();
    if(!CIBlockElement::Delete($ELEMENT_ID))
    {
        $strWarning .= 'Error!';
        $DB->Rollback();
    }
    else
        $DB->Commit();
}

Все поля пользователя


$rsUser = CUser::GetByID(CUser::GetID());
$arUser = $rsUser->Fetch();
echo "<pre>"; 
print_r($arUser); 
echo "</pre>";

Добавить скрипты в произвольном месте

\bitrix\main\page\asset::getinstance()->addstring('<script src="//code.jquery.com/ui/1.12.1/jquery-ui.js"></script>', false, AFTER_JS);

Добавить стили, скрипты в шаблоне компонента


$this->addExternalCss($templateFolder . "/slick-theme.css");
$this->addExternalCss("http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css");
$this->addExternalJS($templateFolder . "/slick.min.js");

Быстро преобразовать дату


$date = "31.12.2007";
$format = "DD.MM.YYYY";
// получим формат текущего сайта
$new_format = CSite::GetDateFormat("SHORT"); // YYYY-MM-DD
$new_date = $DB->FormatDate($date, $format, $new_format);
echo $new_date; // 2007-12-31

Вывести дату

список форматов тут

https://dev.1c-bitrix.ru/api_help/main/functions/date/formatdate.php

FormatDate('d M Y', MakeTimeStamp($arItem['TIMESTAMP_X']));
// выведет 30 ноя 2020

Дата

$date_obj = new DateTime();
// обрати внимание формат здесь d m Y !
Main\Type\DateTime::createFromUserTime($date_obj->format('d.m.Y H:i:s'));

Изменение кол-ва товара на складе


function update_store_amount(){

	list($PRODUCT_ID, $STORE_ID) = array(53914, 5);
// класс для работы со остатками товара на складах. Не путать с CCatalogStore
	$rsStore = CCatalogStoreProduct::GetList(
		[],
		[
			"PRODUCT_ID" => $PRODUCT_ID,
			"STORE_ID" => $STORE_ID,
		],
		false,
		false,
		[]
	);
	$arStore = $rsStore->Fetch();

	$ID = CCatalogStoreProduct::Update(
	   $arStore['ID'], // ид записи
	   [
			"PRODUCT_ID" => $PRODUCT_ID,
			"STORE_ID" => $STORE_ID,
	        "AMOUNT" => 1,
	   ]
	);
          var_dump($ID);
}
update_store_amount();

Остатки по складам

// класс для работы со складами
$dbResult = CCatalogStore::GetList(
		   array('PRODUCT_ID'=>'ASC','ID' => 'ASC'),
		   array(
		   	'ACTIVE' => 'Y',
		   	'PRODUCT_ID'=>$product['ID'], 
		   	'ID' => [1] // Склад на ленина
		   ),
		   false,
		   false,
		   array("ID","TITLE","ACTIVE","PRODUCT_AMOUNT","ELEMENT_ID")
		   // array("*")
		);

		while ($ob = $dbResult->GetNext(true, false)) {
		    // print_r($ob);
		    $store_am[] = $ob['PRODUCT_AMOUNT'];
		}
		$res = array_filter($store_am, function($item){ return (int)$item > 0; });

Вывести значение HTML поля


html_entity_decode()

Текущий раздел

$APPLICATION->GetCurDir();

Вывести навигацию в каталоге


// catalog.section/temp1/template.php
$arResult["NAV_STRING"];

Путь шаблона компонента


$templateFolder

Буферизация контента


// аналог ob_start(); 2-й параметр сортировка
$this->SetViewTarget('new_cont', 100);
echo 'new cont 123';
// аналог $GLOBALS['new_cont'] = ob_get_clean();
$this->EndViewTarget();
// аналог echo $GLOBALS['new_cont'];
$APPLICATION->ShowViewContent('new_cont');
// получить контент
$res = $APPLICATION->GetViewContent('new_cont');

PHP переменную в JS объект

var a = <?=CUtil::JSEscape($arParams["RS_FILTER_TYPE"]);?>
var b = <?=CUtil::PhpToJSObject($arResult["JS_FILTER_PARAMS"]);?>

Подключение файла

$APPLICATION::IncludeFile(SITE_TEMPLATE_PATH  . '/menu2.php' , ['city' => $city], ['MODE' => 'php']);

Включаемая область

Плюс такого метода в возможности редактировать через админку, и виз. редактор.

$APPLICATION->IncludeComponent("bitrix:main.include", "", array("AREA_FILE_SHOW" => "file", "PATH" => SITE_DIR."/cart/oferta.html"), false);

Список заказов со свойствами заказа

$date = new DateTime();
$date->sub(new DateInterval('P1M'));
$arFilter = Array(
'PROPERTY_VAL_BY_CODE_clientID' => $clientID,
'>DATE_INSERT' => $date->format('d.m.Y');
);
// 100 заказов за послед. мес.
$db_sales = CSaleOrder::GetList(array("DATE_INSERT" => "DESC"), $arFilter, false, ['nTopCount' => 100] );
while ($ar_sales = $db_sales->Fetch())
{
    $ID = $ar_sales['ID'];
    // Все свойства заказа
   $db_props = CSaleOrderPropsValue::GetOrderProps($ID);
	while ($arProps = $db_props->Fetch())
	{
		if($arProps['CODE'] == 'PHONE'){
                     echo $arProps['VALUE'];
		}
	}
}

Путь до картинки

$rsFile = CFile::GetPath($file_id);

Превью картинки

// с обрезкой под размеры, качество 100%
$small = CFile::ResizeImageGet($file_id, array('width' => 100, 'height' => 50), BX_RESIZE_IMAGE_EXACT, false, false, false, 100); 

Применить/удалить купон

\Bitrix\Sale\DiscountCouponsManager::add('coupon123');
// удалить
\Bitrix\Sale\DiscountCouponsManager::clearApplyCoupon('coupon123');
 \Bitrix\Sale\DiscountCouponsManager::delete('coupon123');

Товары в корзине, к которым применима скидка

CModule::IncludeModule('sale');


$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", "DELAY", 
              "CAN_BUY", "PRICE", "WEIGHT")
    );
while ($arItem = $dbBasketItems->Fetch())
{
    $arDiscounts = CCatalogDiscount::GetDiscountByProduct(
        $arItem['PRODUCT_ID'],
        $USER->GetUserGroupArray(),
        "N",
        2,
        SITE_ID
    );
}

Доступное количество товара

// потребуется переиндексация каталога товаров
$result = \Bitrix\Catalog\ProductTable::getList(array(
    'filter' => array('QUANTITY' => 0),
    'select' => array('ID', 'QUANTITY')
));

while($product=$result->fetch())
{
    \Bitrix\Catalog\ProductTable::update($product['ID'], ['QUANTITY' => 100]);
}

Добавление записи в хайлоад блок

use Bitrix\Main\Loader; 

Loader::includeModule("highloadblock"); 

use Bitrix\Highloadblock as HL; 
use Bitrix\Main\Entity;

$hlbl = 3; 
$hlblock = HL\HighloadBlockTable::getById($hlbl)->fetch(); 

$entity = HL\HighloadBlockTable::compileEntity($hlblock); 
$entity_data_class = $entity->getDataClass(); 

   // Массив полей для добавления
   $data = array(
   		"UF_NAME" => 'черный',
   		"UF_XML_ID" => 'cherny'
   );

   $result = $entity_data_class::add($data);

Вывод ошибки

if($ex = $APPLICATION->GetException())
    	echo $ex->GetString();
// .settings.php
'log' => ['settings' => ['file' => 'error-log.txt', 'log_size' => 100000]]

Ядро

require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");

Leave a comment

Your email address will not be published.


*