Элементы

08.09.2013

Здесь приведены примеры использования основных функций класса CIBlockElement. Примеры бессмысленны, служат как образец для вставки в код. Скопируй и удали лишнее. А также, даны ссылки на подробное описание в документации битрикса.

Подключаем функции модуля iblock

 
CModule::IncludeModule('iblock');

Получение элементов, функция GetList


$arResult['ITEMS'] = array();
$arFilter = array(		
    'ACTIVE' => 'Y',
    'SECTION_ACTIVE' => 'Y',
    'SECTION_GLOBAL_ACTIVE' => 'Y',
    'IBLOCK_ID' => $arParams['IBLOCK_ID'],
    'SECTION_ID' => $arParams['SECTION_ID'],
    'INCLUDE_SUBSECTIONS' => 'Y',
);
$arSelect = array('IBLOCK_ID','ID','NAME','DETAIL_PAGE_URL','PREVIEW_TEXT','DATE_ACTIVE_FROM');
$arOrder = array('SORT'=>'ASC','DATE_ACTIVE_FROM' => 'DESC');
$arGroupBy = array('ID'); //default = false
$arNavStartParams = array(//default = false
    'nTopCount' => 10,
    'iNumPage' => $arParams['PAGE'],
    'nPageSize' => $arParams['COUNT_ON_PAGE'], 
    'nElementID' => $arResult['ELEMENT']['ID'], 
);
$rsElement = CIBlockElement::GetList($arOrder, $arFilter, $arGroupBy, $arNavStartParams, $arSelect);
while($obElement = $rsElement->GetNextElement()){
        $arItem = $obElement->GetFields();
        $arItem['PROP'] = $obElement->GetProperties(); //Получение свойств
        $arResult['ITEMS'][] = $arItem;		
}
$arResult['NAV_STRING'] = $rsElement->GetPageNavString('');

Функция GetList в документации битрикса

Модификаторы фильтров $arFilter: Число, Дата, Маска, Строка

Фильтр со сложной логикой:

Вложенность фильтров теоретически не ограничена.


$arFilter = array(
    "IBLOCK_ID" => $IBLOCK_ID,
    array(
        "LOGIC" => "OR",//"AND" по умолчанию
        array("PROPERTY_RADIUS" => 50, "=PROPERTY_CONDITION" => "Y"),
        array(">=PROPERTY_RADIUS" => 50, "!=PROPERTY_CONDITION" => "Y"),
    ),
);

Фильтр с подзапросом:

К полю ID применим подзапрос:

CIBlockElement::SubQuery(string strField, array arFilter), где strField - Название поля, по которому будет осуществляться фильтрация. (ID | PROPERTY_#PROPERTY_CODE# - привязка к элементам);
arFilter - Фильтр, аналогичный фильтру основному запросу;
Функция SubQuery в документации битрикса


$arFilter = array(
      "ID" => CIBlockElement::SubQuery("PROPERTY_AUTHOR", array(
        "IBLOCK_ID" => $BOOK_IBLOCK,
        ">=PROPERTY_PRINT_DATE" => "2000-01-01 00:00:00",
      )),
);

Функция GetPageNavString($navigationTitle, $templateName = "", $showAlways=false);

Функция возвращает html блок с постраничкой, где

$navigationTitle - заголовок;
$templateName - шаблон комнонента system.pagenavigation;
$showAlways - выводить всегда(Y|N);

Поля элементов инфоблока

ID PREVIEW_PICTURE MODIFIED_BY
CODE PREVIEW_TEXT USER_NAME
XML_ID PREVIEW_TEXT_TYPE LANG_DIR
NAME DETAIL_PICTURE LIST_PAGE_URL
IBLOCK_ID DETAIL_TEXT DETAIL_PAGE_URL
IBLOCK_SECTION_ID DETAIL_TEXT_TYPE SHOW_COUNTER
IBLOCK_CODE SEARCHABLE_CONTENT SHOW_COUNTER_START
ACTIVE DATE_CREATE WF_COMMENTS
DATE_ACTIVE_FROM CREATED_BY WF_STATUS_ID
DATE_ACTIVE_TO CREATED_USER_NAME LOCK_STATUS
SORT TIMESTAMP_X TAGS

Добавление / обновление элементов


$el = new CIBlockElement;

$PROP = array();
$PROP['AUTHOR'] = "Михаил"; 
$PROP['LINK'] = 38;      

$arLoadProductArray = Array(
  'IBLOCK_ID'      => 18,
  'PROPERTY_VALUES'=> $PROP,//Должны быть указаны ВСЕ свойства, не указаные БУДУТ ЗАТЕРТЫ.
  'NAME'           => 'Элемент',
  'ACTIVE'         => 'Y',     
  'DATE_ACTIVE_FROM'    => ConvertTimeStamp($linuxTimeStamp,'FULL'),       
  'PREVIEW_TEXT'   => 'текст для списка элементов',
  'PREVIEW_TEXT_TYPE'   => 'html', 
  'DETAIL_PICTURE' => CFile::MakeFileArray($_SERVER['DOCUMENT_ROOT'].'/image.gif'),
  );

if ($PRODUCT_ID) { //Обновим элемент
    if (!$res = $el->Update($PRODUCT_ID, $arLoadProductArray)){
        echo "Error: ".$el->LAST_ERROR;
    }
} else { //Добавим элемент
    if (!$PRODUCT_ID = $el->Add($arLoadProductArray)){
        echo "Error: ".$el->LAST_ERROR;
    }
}

Функция Add в документации битрикса, Функция Update в документации битрикса,

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

Неуказанные свойства НЕ будут затерты


$ELEMENT_ID = 18;  // код элемента
$PROP = array();
$PROP['AUTHOR'] = "Михаил"; 
$PROP['LINK'] = 38;  
CIBlockElement::SetPropertyValuesEx($ELEMENT_ID, $IBLOCK_ID, $PROP);

Функция SetPropertyValuesEx в документации битрикса

Комментарии:

Виктор

02.06.2014 21:23:14

Спасибо за пояснение "Неуказанные свойства НЕ будут затерты"

Namco

13.05.2016 12:40:10

Подскажите, почему дата активности меняется на сайте, а при обновлении страницы возвращяется обратно старое значение.
<?
include($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
define("NO_KEEP_STATISTIC", true);
define("NO_AGENT_STATISTIC", true);
if(CModule::IncludeModule("iblock")){

/*if (isset($_GET['ID']) && intval($_GET['ID'])):*/
$newDate =ConvertTimeStamp(time(), "FULL");
$elProps = array(
"MODIFIED_BY" => $USER->GetID(),
"IBLOCK_ID" => 3,
"ACTIVE_FROM" => $newDate,
"ACTIVE" => "Y",
);
#$newEl = new CIBlockElement;

$newEl = CIBlockElement::SetPropertyValuesEx($_REQUEST["id"],3,$elProps);
#$res = $newEl->Update($_GET['ID'], $elProps);
echo $newDate;
echo ($newEl->LAST_ERROR);

/*endif;*/
die();
}

Максим

13.05.2016 14:18:01

Нужно использовать

$newEl = new CIBlockElement;
$newEl->Update($_GET['ID'], $elProps);

Функция CIBlockElement::SetPropertyValuesEx Устанавливает значения свойств, которые PROPERTY_..., а вы меняете основные поля

Namco

13.05.2016 14:34:42

ПИсал так $res = $newEl->Update($_GET['ID'], $elProps); Но почему у элемента скидывалось 3 свойства типа (список, число, число)

Максим

13.05.2016 14:39:06

Если в массиве $elProps нет ключа PROPERTY_VALUES то свойства скидываться не будут. Еще раз попробуйте

Алексей

30.08.2016 23:10:50

Для апдейта элемента
$newEl = new CIBlockElement;
$newEl->Update($_GET['ID'], $elProps);

но нужно передать ВСЕ св-во, те что не переданы в массиве PROPERTY_VALUES - будут сброшены

Для апдейта только нужных св-в - курим CIBlockElement::SetPropertyValuesEx

Дима

10.11.2021 20:14:31

Есть ли возможность изменить текст ошибки, получаемой в LAST_ERROR на свой? В настройках может где лежит...

Максим

11.11.2021 06:24:41

Вероятно LAST_ERROR заменить не получиться. Но существует один хитрый способ, как заменять стандартные фразы битрикса: Тайные технологии локализации.
В вашем случае, предлагаю проверять возможные ошибки до вызова метода ядра, либо после смотреть LAST_ERROR и, в зависимости от него, показывать свою ошибку.

Оставить комментарий:

Представьтесь пожалуйста:
Электронная почта:
Электронный адрес не публикуются
Текст сообщения:
Для подсветки кода, оборачивайте ваш код в теги <code></code>
Введите 5 цифр с картинки:

Рекомендую:

Поделюсь промокодами для хостинга TimeWeb!

Поддержать проект: