Элементы
Здесь приведены примеры использования основных функций класса 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);
Комментарии:
Виктор
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
Функция CIBlockElement::SetPropertyValuesEx Устанавливает значения свойств, которые PROPERTY_..., а вы меняете основные поля
Namco
13.05.2016 14:34:42
Максим
13.05.2016 14:39:06
Алексей
30.08.2016 23:10:50
$newEl = new CIBlockElement;
$newEl->Update($_GET['ID'], $elProps);
но нужно передать ВСЕ св-во, те что не переданы в массиве PROPERTY_VALUES - будут сброшены
Для апдейта только нужных св-в - курим CIBlockElement::SetPropertyValuesEx
Дима
10.11.2021 20:14:31
Максим
11.11.2021 06:24:41
В вашем случае, предлагаю проверять возможные ошибки до вызова метода ядра, либо после смотреть LAST_ERROR и, в зависимости от него, показывать свою ошибку.
Оставить комментарий: