Инфоблоки 1С-Битрикс - вывод записей, удаление, добавление

Примеры выборки из инфоблоков Битрикса, удаление и добавление записей в инфоблок

Вывести записи инфоблока

Для оптимизации ресурсов рекомендуется указывать поля, которые надо вывести, чтобы не выводить все.
$arSelect = Array(
	"ID", "IBLOCK_ID", "NAME", 
	"DATE_ACTIVE_FROM", "PROPERTY_*"
);
//IBLOCK_ID и ID обязательно должны быть указаны
 
$arFilter = Array(
	"IBLOCK_ID"=>IntVal($yvalue), "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y"
);

$res = CIBlockElement::GetList(
	array("ID"=>"ASC"), 
	$arFilter, 
	false, 
	Array("nPageSize"=>50), 
	$arSelect
);

while($ob = $res->GetNextElement()){ 
	$arFields = $ob->GetFields();  
	//print_r($arFields);
	$arProps = $ob->GetProperties();
	//print_r($arProps);
}

Разделы инфоблока

Выбор пользовательских свойств разделов возможен только при передаче в ключ фильтра IBLOCK_ID одиночного значения
  // выборка только активных разделов из инфоблока $IBLOCK_ID, в которых есть элементы 
  // со значением свойства SRC, начинающееся с https://
  $arFilter = Array('IBLOCK_ID'=>$IBLOCK_ID, 'GLOBAL_ACTIVE'=>'Y', 'PROPERTY'=>Array('SRC'=>'https://%'));
  $db_list = CIBlockSection::GetList(Array($by=>$order), $arFilter, true);
  $db_list->NavStart(20);
  echo $db_list->NavPrint($arIBTYPE["SECTION_NAME"]);
  while($ar_result = $db_list->GetNext())
  {
    echo $ar_result['ID'].' '.$ar_result['NAME'].': '.$ar_result['ELEMENT_CNT'].'
'; } echo $db_list->NavPrint($arIBTYPE["SECTION_NAME"]);

Сохранение свойств инфоблока

Сохранять свойства можно одной из четырёх функций:
CIBlockElement::Update //обновление полей и свойств элемента
CIBlockElement::SetPropertyValueCode // обновление одного свойства
CIBlockElement::SetPropertyValues // обновление одного или всех свойств
CIBlockElement::SetPropertyValuesEx // обновление произвольного количества свойств элемента
Свойство типа файл сохраняется по другому - не надо указывать VALUE
$ELEMENT['MORE_PHOTO'] = array(
	CFile::MakeFileArray(…);
);

Вывод записей инфоблока с фильтром по свойству

$arFilter = array(
	"IBLOCK_ID" => 19,
	"PROPERTY_CITY" = "Москва" // пример вывода со свойством
);
	
$result = CIBlockElement::GetList
(
	array("ID"=>"ASC"), $arFilter
);
	   
while($element = $result->Fetch()){
	echo "id: ".$element["ID"]."
"; }

Примеры фильтров

$arrFilter=Array(array(
        "LOGIC" => "OR",
        array("DATE_ACTIVE_TO"=>false),
        array(">DATE_ACTIVE_TO"=>ConvertTimeStamp(time(),"FULL"))
        
    ));

$arrFilter=Array("RAND" => "ASC")); // случайные элементы

// выборка активных элементов из информационного блока $yvalue, 
// у которых установлено значение свойства с символьным кодом SRC 
// и дата начала активности старше 1 января 2003 года
// выбранные элементы будут сгруппированы по дате активности
$arFilter = Array(
 "IBLOCK_ID"=>IntVal($yvalue), 
 ">DATE_ACTIVE_FROM"=>date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT")), mktime(0,0,0,1,1,2003)), 
 "ACTIVE"=>"Y", 
 "!PROPERTY_SRC"=>false
 );

Операторы:
"!" - не равно
"<" - меньше
"<=" - меньше либо равно
">" - больше
">=" - больше либо равно
"><" - между

Вывод элемента ДО и ПОСЛЕ

Можно изменить nPageSize и выводить не 1 элемент, а любое количесто.

$arResult['PREV'] = $arResult['CURRENT'] = $arResult['NEXT'] = array();

//предыдущая и следующая 
if (\Bitrix\Main\Loader::includeModule('iblock')) {
   $i = 0;
   $arSort = array('SORT' => 'ASC', 'ID' => 'DESC');
   $arFilter = array('ACTIVE' => 'Y', 'IBLOCK_ID' => $arParams['IBLOCK_ID']);
   $arSelect = array('ID', 'NAME', 'DETAIL_PAGE_URL');

   $res = CIBlockElement::getList($arSort, $arFilter, false, array('nElementID' => $element['ID'], 'nPageSize' => 1), $arSelect);
   while ($row = $res->fetch()) {
      if ($element['ID'] == $row['ID']) {
         $arResult['CURRENT'] = $row;
      }
      $arRows[$row['RANK']] = $row;
   }
   if(isset($arRows[$arResult['CURRENT']['RANK']-1])) {
      $arResult['PREV'] = $arRows[$arResult['CURRENT']['RANK']-1];
   }
   if(isset($arRows[$arResult['CURRENT']['RANK']+1])) {
      $arResult['NEXT'] = $arRows[$arResult['CURRENT']['RANK']+1];
   }
   unset($arRows);
}

Вывод элемента по ID

$res = CIBlockElement::GetByID($ID);
if($ar_res = $res->GetNext())
  echo $ar_res['NAME'];

Удаление записи

CIBlockElement::Delete($element['ID']); // добавить это в предыдущем цикле while

Создание записи

$el = new CIBlockElement;
$arLoadProductArray = Array(
	"IBLOCK_SECTION_ID"	=> 0, // ID раздела
	"IBLOCK_ID"		=> $IBLOCK_ID,
	"NAME"			=> $title,
	"ACTIVE"		=> 'Y',
	"PREVIEW_TEXT"		=> '',
	"DETAIL_TEXT"		=> '',
	"CODE"			=> 'code',
	"SORT"			=> $sort,
	
	"IPROPERTY_TEMPLATES"=>Array(
		"ELEMENT_META_TITLE" 		=> '',
		"ELEMENT_META_DESCRIPTION" 	=> '',
		"ELEMENT_META_KEYWORDS" 	=> '',
	),
);

if($PRODUCT_ID = $el->Add($arLoadProductArray)){
	CIBlockElement::SetPropertyValuesEx($PRODUCT_ID, $IBLOCK_ID, $PROP);	

}else{					
	echo "Error: ".$el->LAST_ERROR." "; 
}

Обновить свойство инфоблока

// простое свойство
$ar = 'Значение';

// или множественное
$ar[] = array(
	"VALUE" => $str,
	"DESCRIPTION" => $pos
);

CIBlockElement::SetPropertyValuesEx(
	$element['ID'], 
	$IBLOCK_ID, 
	array("PROPERTY_CODE" => $ar)
);

Удалить множественное свойство инфоблока

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


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


Облако тегов