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

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


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

Обновить св-во элемента

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

Если массив 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');
	}

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

// Находим 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;
           }
        }
CIBlockElement::SetPropertyValuesEx($ar_res['ID'], $ar_res['IBLOCK_ID'], $arPropertyArchive, ['DoNotValidateLists']);

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

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

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


$mxResult = CCatalogSku::GetProductInfo($id);
// Ссылка на оффер.
$arResult['ITEMS'][$key1]['DETAIL_PAGE_URL'] = CIBlockElement::GetByID($sku['ID'])->GetNext()['DETAIL_PAGE_URL'].'?offer='.$arItem['ID'];

инфо раздела


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

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


$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' => 'Да'    ]; 

Быстро добавить в корзину товар.


Add2BasketByProductID($id, $quantity)

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

$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 ($arItems = $dbBasketItems->Fetch())
{
    if (strlen($arItems["CALLBACK_FUNC"]) > 0)
    {
        CSaleBasket::UpdatePrice($arItems["ID"], 
                                 $arItems["CALLBACK_FUNC"], 
                                 $arItems["MODULE"], 
                                 $arItems["PRODUCT_ID"], 
                                 $arItems["QUANTITY"]);
        $arItems = CSaleBasket::GetByID($arItems["ID"]);
    }

    $arBasketItems[] = $arItems;
}

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


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();
$this->SetViewTarget('new_cont');
echo 'new cont 123';
// аналог $GLOBALS['new_cont'] = ob_get_clean();
$this->EndViewTarget();
// аналог echo $GLOBALS['new_cont'];
$APPLICATION->ShowViewContent('new_cont');

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

$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'];
		}
	}
}

Leave a comment

Your email address will not be published.


*