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

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


$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;
if(!$ibp->Update(678, ['CODE' => 'BORTA']))
     echo $ibp->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);

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


$mxResult = CCatalogSku::GetProductInfo($id);
// Ссылка на оффер.
$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'], []);

инфо раздела


$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",
    // "WEIGHT" => 530,
    "QUANTITY" => $q,
    "LID" => SITE_ID,
    "DELAY" => "N",
    "CAN_BUY" => "Y",
    "NAME" => $name,
    "DETAIL_PAGE_URL" => CIBlockElement::GetByID($id)->GetNext()['DETAIL_PAGE_URL']
  );

$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>";

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


$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

Дата

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

	$res = CCatalogStoreProduct::Update(
	   $arStore['ID'],
	   [
			"PRODUCT_ID" => $PRODUCT_ID,
			"STORE_ID" => $STORE_ID,
	        "AMOUNT" => 0,
	   ]
	);
}

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


$dbResult = CCatalogStore::GetList(
		   array('PRODUCT_ID'=>'ASC','ID' => 'ASC'),
		   array(
		   	'ACTIVE' => 'Y',
		   	'PRODUCT_ID'=>$arItem['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);

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

$small = CFile::ResizeImageGet($id, array('width' => 100, 'height' => 50), BX_RESIZE_IMAGE_PROPORTIONAL, true);
$small2 = CFile::ResizeImageGet($id, array('width' => 100, 'height' => 50), BX_RESIZE_IMAGE_PROPORTIONAL_ALT, true);
// с обрезкой под размеры
$small3 = CFile::ResizeImageGet($id, array('width' => 100, 'height' => 50), BX_RESIZE_IMAGE_EXACT, true); 

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

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

Leave a comment

Your email address will not be published.


*