Описание
int CIBlockElement::Add(
array arFields,
bool bWorkFlow = false,
bool bUpdateSearch = true,
bool bResizePictures = false
);
Метод добавляет новый элемент информационного блока. Перед добавлением элемента вызываются обработчики события OnBeforeIBlockElementAdd, из которых можно изменить значения полей или отменить добавление элемента вернув сообщение об ошибке. После добавления элемента вызывается событие OnAfterIBlockElementAdd. Нестатический метод.
Смотрите также
- CIBlockElement::Update
- CIBlockElement::SetPropertyValues()
- CIBlockElement::SetPropertyValueCode()
- OnBeforeIBlockElementAdd
- OnAfterIBlockElementAdd
Примечание: если при добавлении свойств в PROPERTY_VALUES при сохранении элемента инфоблока методом CIBlockElement::Add, происходит подобная ошибка:
MySQL Query Error: INS ERT INTO b_iblock_element_property (IBLOCK_ELEMENT_ID, IBLOCK_PROPERTY_ID, VALUE, VALUE_NUM) SEL ECT 323 ,P.ID ,'28' ,28,0000 FR OM b_iblock_property P WHERE ID=42[Column count doesn't match val ue count at row 1]
попробуйте выставить пустое значение в setlocale( LC_NUMERIC, » );, чтобы PHP использовал точку при форматировании числа, а не запятую.
Параметры вызова
Параметр | Описание | С версии |
---|---|---|
arFields | Массив вида Array(«поле»=>»значение», …), содержащий значения полей элемента инфоблоков и дополнительно может содержать поле «PROPERTY_VALUES» — массив со всеми значениями свойств элемента в виде массива Array(«код свойства»=>»значение свойства»). Где «код свойства» — числовой или символьный код свойства, «значение свойства» — одиночное значение, либо массив значений если свойство множественное. Дополнительно для сохранения значения свойств см: CIBlockElement::SetPropertyValues(), CIBlockElement::SetPropertyValueCode().
Примечание: поля с датами задаются в формате сайта. |
|
bWorkFlow | Вставка в режиме документооборота. Если true и модуль документооборота установлен, то данное добавление будет учтено в журнале изменения элемента. Не обязательный параметр, по умолчанию вставка в режиме документооборота отключена. | 3.1.3 |
bUpdateSearch | Индексировать элемент для поиска. Для повышения производительности можно отключать этот параметр во время серии добавлений элементов, а после вставки переиндексировать поиск. Не обязательный параметр, по умолчанию элемент после добавления будет проиндексирован в поиске. | 3.2.1 |
bResizePictures | Использовать настройки инфоблока для обработки изображений. По умоляанию настройки не применяются. Если этот параметр имеет значение true, то к полям PREVIEW_PICTURE и DETAIL_PICTURE будут применены правила генерации и масштабирования в соответствии с настройками информационного блока. | 8.0.10 |
Возвращаемое значение
Метод возвращает ID добавленного элемента инфоблока, если добавление прошло успешно. При возникновении ошибки метод вернет false, а в свойстве объекта LAST_ERROR будет содержаться текст ошибки.
Примеры использования
Пример 1:
<?
$el = new CIBlockElement;$PROP = array();
$PROP[12] = "Белый"; // свойству с кодом 12 присваиваем значение "Белый"
$PROP[3] = 38; // свойству с кодом 3 присваиваем значение 38$arLoadProductArray = Array(
"MODIFIED_BY" => $USER->GetID(), // элемент изменен текущим пользователем
"IBLOCK_SECTION_ID" => false, // элемент лежит в корне раздела
"IBLOCK_ID" => 18,
"PROPERTY_VALUES"=> $PROP,
"NAME" => "Элемент",
"ACTIVE" => "Y", // активен
"PREVIEW_TEXT" => "текст для списка элементов",
"DETAIL_TEXT" => "текст для детального просмотра",
"DETAIL_PICTURE" => CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]."/image.gif")
);if($PRODUCT_ID = $el->Add($arLoadProductArray))
echo "New ID: ".$PRODUCT_ID;
else
echo "Error: ".$el->LAST_ERROR;
?>
Пример 2 (примеры массивов для свойств):
//описание массива для свойства типа "Html/Text" $arrProp = Array(); $arrProp[ID или CODE][0] = Array("VALUE" => Array ("TEXT" => "значение", "TYPE" => "html или text")); //описание массива для свойства типа "Список" $arrProp = Array(); $arrProp[ID или CODE] = Array("VALUE" => $ENUM_ID ); //ENUM_ID - это ID значения в списке, его можно получить при помощи: CIBlockPropertyEnum::GetList //описание массива для свойства типа "Список" множественного выбора $arrProp = Array(); $arrProp[ID или CODE] = array( $ENUM_ID1, $ENUM_ID2, $ENUM_ID3, $ENUM_ID4); //пример массива для вставки видео $PROP["561"] = Array ( "n0" => Array( "VALUE" => Array ("PATH" => "/upload/single_2.flv", "WIDTH" => 400, "HEIGHT" => 300, "TITLE" => "Заголовок видео", "DURATION" => "00:30", "AUTHOR" => "Автор видео", "DATE" => "01.02.2011") ) ); //При добавлении нового значения/значений множественного свойство типа "Файл" необходимо использовать ключи вида n0,n1,n2 ... nN .
Пример 3:
//детальная картинка загружается непосредственно из формы <? $el = new CIBlockElement; $PROP = array(); $PROP[12] = 'Белый'; // свойству с кодом 12 присваиваем значение "Белый" $PROP[3] = 38; // свойству с кодом 3 присваиваем значение 38 $arLoadProductArray = Array( 'MODIFIED_BY' => $GLOBALS['USER']->GetID(), // элемент изменен текущим пользователем 'IBLOCK_SECTION_ID' => false, // элемент лежит в корне раздела 'IBLOCK_ID' => 18, 'PROPERTY_VALUES' => $PROP, 'NAME' => 'Элемент', 'ACTIVE' => 'Y', // активен 'PREVIEW_TEXT' => 'текст для списка элементов', 'DETAIL_TEXT' => 'текст для детального просмотра', 'DETAIL_PICTURE' => $_FILES['DETAIL_PICTURE'] // картинка, загружаемая из файлового поля веб-формы с именем DETAIL_PICTURE ); if($PRODUCT_ID = $el->Add($arLoadProductArray)) { echo 'New ID: '.$PRODUCT_ID; } else { echo 'Error: '.$el->LAST_ERROR; } ?>
Пример 4:
//добавления элемента с установкой для его свойства пары "значение" и "описание" $el = new CIBlockElement; $PROP = array(); $PROP[id_property] = Array( "n0" => Array( "VALUE" => "value", "DESCRIPTION" => "description") ); $arLoadProductArray = Array( "IBLOCK_SECTION" => false, "IBLOCK_ID" => iblock_id, "PROPERTY_VALUES" => $PROP, "NAME" => "Элемент", ); $PRODUCT_ID = id_element; $res = $el->Update($PRODUCT_ID, $arLoadProductArray);
Пример 5:
//получить следующий ID для свойства типа "Счётчик" можно методом CIBlockSequence::GetNext и указать его в методе CIBlockElement:Add CModule::IncludeModule('iblock'); $IBLOCK_ID = 21; $PROPERTY_ID = 1223; $seq = new CIBlockSequence($IBLOCK_ID, $PROPERTY_ID); $el = new CIBlockElement; $ID = $el->Add(array( "IBLOCK_ID" => $IBLOCK_ID, "NAME" => "test element", "PROPERTY_VALUES" => array($PROPERTY_ID => $seq->GetNext()) )); $rs = CIBlockElement::GetList(array(), array("ID" => $ID), false, false, array("ID", "PROPERTY_ABSTRACT_ID")); if($ar = $rs->GetNext()) echo 'PRINT_R:<pre style="font:16px Courier">', print_r($ar, 1), '</pre>';
Пример 6:
//Если при добавлении элемента надо обязательно заполнять символьный код элемента, то можно не писать свою функцию, а воспользоваться системным методом: $params = Array( "max_len" => "100", // обрезает символьный код до 100 символов "change_case" => "L", // буквы преобразуются к нижнему регистру "replace_space" => "_", // меняем пробелы на нижнее подчеркивание "replace_other" => "_", // меняем левые символы на нижнее подчеркивание "delete_repeat_replace" => "true", // удаляем повторяющиеся нижние подчеркивания "use_google" => "false", // отключаем использование google ); "CODE" => CUtil::translit("здесь переменная названия элемента", "ru" , $params);
Пример 7:
//пример с символьными кодами свойств в массиве PROPERTY_VALUES: $arFields = array( "ACTIVE" => "Y", "IBLOCK_ID" => 123, "IBLOCK_SECTION_ID" => 456, "NAME" => "Название элемента", "CODE" => "nazvanie-elementa", "DETAIL_TEXT" => "Описание элемента", "PROPERTY_VALUES" => array( "MANUFACTURER" =>"Имя производителя", //Производитель - свойство "ARTNUMBER" =>"Артикул товара", //Артикул производителя - свойство "MATERIAL" =>"Материал товара" //Материал - свойство ) ); $oElement = new CIBlockElement(); $idElement = $oElement->Add($arFields, false, false, true); //Необходимо помнить, что если вы указали не все свойства в массиве PROPERTY_VALUES, то остальные свойства могут быть удалены. //Для обновления элемента гораздо безопаснее использовать CIBlockElement::SetPropertyValueCode.
Пример 8 (как получить значение свойства):
//например, можно получить значение счетчика и записать его в базу //$iblockId - ID инфоблока //$propertyId - ID свойства $seq = new CIBlockSequence($iblockId, $propertyId); $current_value = $seq->GetNext(); //в $current_value - новое значение, которое можно писать в базу
2 Сообщение не промодерировано, возможны ошибки и неточности. |
КУДА ЭТО ПИСАТЬЬ????? |
2 novikov_citgk |
||
Не хватает в примерах: вставки изображения в PREVIEW_PICTURE (или DETAIL_PICTURE) со стороннего сайта:
|
||
1 Anton Lytko |
||
|
||
1 Михаил Базаров |
||
|
||
3 Антон Царук |
Для установки дат DATE_ACTIVE_FROM и DATE_ACTIVE_TO используется формат сайта: d.m.Y. Передавать даты в формате БД — не получается… |
7 Антон Царук |
||
Помимо «PROPERTY_VALUES» в массиве полей может быть еще и сверхсекретный массив с ключом «RIGHTS» — с его помощью можно настроить расширенный доступ к элементу инфоблока.
можно установить доступ к элементу для определенного пользователя c ID=777. 34 — это ID права доступа «Изменение» в модуле «Инфоблоки» (ID от проекта к проекту может быть разное, надо смотреть в «Правах доступа» правильное значение) |
||
3 Илья Кругляков |
Может кому пригодится. Если вы собираетесь добавляемый элемент данным методом далее отправить в корзину, то перед добавлением его в корзину необходимо воспользоваться методом CCatalogProduct::Add. Который добавляет параметры товара к элементу каталога. Иначе он не будет добавлен в корзину. |
1 Илья Карев |
||||
но для фото надо использовать CFile::MakeFileArray($filename);
|
||||
24 Владислав Ухов |
Для привязки элемента к нескольким разделам инфоблока используйте ключ |
© «Битрикс», 2001-2023, «1С-Битрикс», 2023
Наверх
Содержание
- Bitrix element add error
- Открытые члены
- Поля данных
- Подробное описание
- Конструктор(ы)
- ◆ __construct()
- Методы
- ◆ delete()
- ◆ getAvailableFields()
- ◆ getErrorByCode()
- ◆ getErrors()
- ◆ getFileUrl()
- Самодельная форма добавления элемента на API Битрикс
- Создаем форму на произвольной странице сайта или в основном шаблоне
- Видео: Форма добавления через API
- Загрузка множественного свойства типа файл
- Мои каналы:
- Записная книжка разработчика
- «Добавление элементов инфоблока bitrix:iblock.element.add»
Bitrix element add error
Открытые члены
__construct (Param $param) isExist () add () get (array $navData=[]) update () delete () getFileUrl () getAvailableFields () getErrors () getErrorByCode ($code)
Поля данных |
|
const | ERROR_ADD_ELEMENT = «ERROR_ADD_ELEMENT» |
const | ERROR_UPDATE_ELEMENT = «ERROR_UPDATE_ELEMENT» |
const | ERROR_DELETE_ELEMENT = «ERROR_DELETE_ELEMENT» |
const | ERROR_ELEMENT_ALREADY_EXISTS = «ERROR_ELEMENT_ALREADY_EXISTS» |
const | ERROR_ELEMENT_NOT_FOUND = «ERROR_ELEMENT_NOT_FOUND» |
const | ERROR_ELEMENT_FIELD_VALUE = «ERROR_ELEMENT_FIELD_VALUE» |
$resultSanitizeFilter = [] |
Подробное описание
См. определение в файле element.php строка 11
Конструктор(ы)
◆ __construct()
См. определение в файле element.php строка 31
Методы
Adds an element.
См. определение в файле element.php строка 73
◆ delete()
Deletes an element.
См. определение в файле element.php строка 250
Returns a list of element data.
Аргументы
array | $navData | Navigation data. |
Возвращает array
См. определение в файле element.php строка 149
◆ getAvailableFields()
Returns a list of available fields for filtering and a list of custom handlers.
См. определение в файле element.php строка 335
◆ getErrorByCode()
Getting once error with the necessary code.
Аргументы
string | $code | Code of error. |
Возвращает Error
◆ getErrors()
Getting array of errors.
◆ getFileUrl()
Returns the path to the file.
Возвращает array An array with a list of url for the field of type «File» or «File (Disk)».
Источник
Самодельная форма добавления элемента на API Битрикс
Компонент iblock.element.add.form написан таким образом, что вы не сможете (не попотев изрядно и не используя js) как угодно переставлять поля ввода. Например сделать заполненеие текста анонса до ввода разделов. Или переставить чекбоксы свойств до ввода названия (хотя это глупо, но вы не сможжете сделать такую глупость даже если захотите)
При разработке информационных порталов, или просто сложных сайтов, на которых пользователям доступно самостоятельное добавление элементов инфоблока, часто возникает потребность в создании достаточно сложных форм добавления элементов
В большинстве случаев, достаточно воcпользоваться стандартным компонентом iblock.element.add.form. Однако, данный компонент очень давно не обновляется. Назвать его гибким и тонко настраеваемым ни как нельзя. Достаточно часто, для создания формы приходиться писать свои костыли. Например: форму добавления элемента инфоблока через API Битрикс
Компонент iblock.element.add.form написан таким образом, что вы не сможете (не попотев изрядно и не используя js) как угодно переставлять поля ввода. Например сделать заполненеие текста анонса до ввода разделов. Или переставить чекбоксы свойств до ввода названия (хотя это глупо, но вы не сможете сделать такую глупость даже если захотите)
Расскажу как сделать форму через API. Абсолютным костылем данный способ не назвать, в любом случае задача будет решена. И у вас будет возможность оформлять форму как угодно.
Работать будем с методом CIBlockElement::Add — добавляет новый элемент информационного блока. Перед добавлением элемента вызываются обработчики события OnBeforeIBlockElementAdd, из которых можно изменить значения полей или отменить добавление элемента вернув сообщение об ошибке.
Создаем форму на произвольной странице сайта или в основном шаблоне
Для начала: имеем инфоблок «Тест», у которого созданы свойства «Строка», «Список», «Чекбокс», «Файл», «Привязка к разделам». ID этого инфоблока 12
Кстати: в стандартном компоненте не хватает некоторых свойств, например он не умеет выводить свойство привязка к раздел. Как это реализовать можете подсмотреть тут
Далее: Создаем в корне сайта страницу add_form_page.php с таким содержимым
Это наша форма, которую заполняет пользователь
Рядом создаем файл add_form_result.php, которому будет передаваться POST запрос и пользователю будет выдаваться сообщение о результате добавления. Содержимое файла:
Вот и все. Результат будет отдаваться в запись элемента инфоблока. Уже по вкусу, можете оформлять как угодно, прикручивать js проверку на заполненность или на проверку данных- маски.
На базе данной заметки сделал компонент. Устроен максимально просто, поддается доработкам и расширению функционала. Компонент добавления элемента в инфоблок
Видео: Форма добавления через API
Опубликовав и прочитав записку, понял, что она не до конца понятна. Решил записать поясняющее видео
Загрузка множественного свойства типа файл
Создаем массив со свойствами файлов, методом CFile::MakeFileArray и передаем в $PROP[«MORE_PHOTO»] (в моем случае, свойство с доп картинками)
Поддержать выпуски видео уроков, поблагодарить за полезную инструкцию или заметку можно через:
Цитата |
---|
Павел Шестаков написал: Добрый день. Все что нужно уже сделано, но вот возникла такая проблема. Инфоблок куда пишу данные имеет свойство «Товар» — привязка к элементу инфоблока каталог товаров. При создании заявки нужно сделать выбор 1-3 элементов из каталога. Как это реализовать полноценно на API не могу разобраться (новичок еще), прошу помощи натолкнуть на мысль. |
Цитата |
---|
Arsen Sheremeta пишет: Здравствуйте. У меня пошаговая форма на 6 шагов. Подскажите пожалуйста как сделать чтоб после первого шага форма создавала запись (элемент), а с каждым следующим шагом, обновляла туже запись а не создавала новую? Спасибо! |
Цитата |
---|
Михаил Базаров пишет: [QUOTE][URL=/club/user/14020/]Arsen Sheremeta[/URL] пишет: Здравствуйте. У меня пошаговая форма на 6 шагов. Подскажите пожалуйста как сделать чтоб после первого шага форма создавала запись (элемент), а с каждым следующим шагом, обновляла туже запись а не создавала новую? Спасибо![/QUOTE] На первом шаге создаете элемент методом: CIBlockElement::Add На остальных обновляете методом: CIBlockElement::Update |
Добрый день
Спасибо за базу знаний по битрикс !
А есть ли возможность сделать и вашей формы редактор статей на сайте ?
Не только создавать статью но и изменять её?
Цитата |
---|
Максим Максимов написал: Добрый день Спасибо за базу знаний по битрикс ! А есть ли возможность сделать и вашей формы редактор статей на сайте ? |
Не только создавать статью но и изменять её?
В целом да. Нужно передать сюда ID статьи и по нему получить все содержимое элемента (методом CIBlockElement::GetByID)
Заполнить им все поля, а дальше в обработчике обновлять с помощью $el->Update
Штука получится монструозная- лучше сделать свой компонент.
Как сделать такой компонент добавления/редактирования элемента, будет рассмотрено в этом курсе
https://camouf.ru/video/board/
Мои каналы:
Каналы на которые я выкладываю видео. Контент дублируется, смотрите где удобнее.
Поделиться страницей в соц. сетях.
Спасибо! Это помогает развивать сайт.
Записная книжка разработчика
Примерно с 2013-го года пишу заметки по разработке сайтов на Битрикс.
Вы можете задавать уточняющие вопросы в комментариях- отвечаю или дополняю заметки по возможности.
Источник
«Добавление элементов инфоблока bitrix:iblock.element.add»
решил не заводить отдельную тему, так как по-моему, просто я затупил :-[
кто-нить подскажет? завожу компонент iblock.element.add , выбираю — показывать все свойства. А он не отображает те, тип которых — привязка к элементам. А мне надо и их заполнять Как быть?
В настройках компоненты укажите ID этих свойств (по умолчанию свойства этого типа не показываются при редактировании через интерфейс).
В шаблоне добавьте вывод этого типа свойства на редактирование так, как вам надо (текстовое поле, комбобокс, радиокнопки).
Если нужны допданные (для того же комбобокса выбрать из другого инфоблока названия элементов), то используйте result_modifier.php для их добавления в $arResult и затем используйте в шаблоне.
Или можно не править шаблон, а просто в том же result_modifier.php привести данные такого свойства к нужному типу данных («L» для комбобокса или «S» для поля ввода).
andreya,
а можно про result_modifier.php немного поподробнеее?
суть в том, что да, я выбираю все свойства, какие предлагается выбрать + прописываю коды тех элементов, которые привязаны к другим ел-там. Вот их и не отображает. Нужно показать именно их, дабы в дальнейшем данные из формы передавались в И-блок..
что именно надо прописать в данном файле и куда его надо закинуть?
Цитата |
---|
Ginner пишет: решил не заводить отдельную тему, так как по-моему, просто я затупил :-[ |
кто-нить подскажет? завожу компонент iblock.element.add, выбираю — показывать все свойства. А он не отображает те, тип которых — привязка к элементам. А мне надо и их заполнятьКак быть?
зделай так где
case «S»:
case «N»:
добавь туда ещё case «E»:
т.е. чтобы было так
а такой вопрос:
передаю параметры из формы, что для пользователей — в форму iblock.element.add.form , а они — не передаются
вот код передачи:
значения в И-блоки — не передаются. если же заполнять напрямую форму iblock.element.add.form — всё путем. но она — недоработана, выбора нет
да и поля не группируются.
Цитата |
---|
Ginner пишет: он короче все все-таки отображает, только пишет Select, а OPTION — уже нет. |
А откуда опшинам взяться? Что и откуда там должно вдруг появиться?
Делаем проще, шаблон не трогаем, помодифицируем $arResult (пример на коленке, поэтому тестируйте/правьте сами).
Итак, копируем папку с дефолтным шаблоном компоненты в нужный шаблон сайта, создаем в папке файл result_modifier.php (что это такое — по ссылке в моем предыдущем сообщении) c примерно следующим содержимым:
ри выводе формы добавления записи в инф. блок (components > bitrix > iblock.element.add.form),
не отображаются в форме свойства «Привязка к элементам» (тип «E»)
как решить проблему? Хотелось бы видеть выпадающий список из элементов соответствующего инф. блока?
—————————————————————
Вот что я добавил прямо в шаблон
if($arResult[«PROPERTY_LIST_FULL»][$propertyID][«PROPERTY_TYPE»] == «E»)
<
echo ‘Поймал! ‘;
$arSelect1 = Array(«ID», «NAME»);
$arFilter1 = Array(«IBLOCK_ID»=>IntVal($yvalue), «ACTIVE_DATE»=>»Y», «ACTIVE»=>»Y»);
$dbAllElements = CIBlockElement::GetList(Array(), $arFilter1, false, false , $arSelect1);
while($arElement = $dbAllElements->Fetch())
<
$arAllElements[$arElement[‘ID’]] = array(‘VALUE’=>$arElement[‘NAME’]);
>
if (!in_array($propertyID, $arResult[‘PROPERTY_LIST_FULL’]))
$arResult[$arResult[‘PROPERTY_LIST_FULL’]][] = $arResult[«PROPERTY_LIST_FULL»][$propertyID];
В результате выводится все, красиво:
Но при выборе USD например в Свойтво записывается какая-то «1» вместо 1869.
В чем может быть дело?
вероятно, потому что должно быть:
Попробуйте тогда убрать замену «E» на «L» в коде выше, а в шаблоне под строкой:
Цитата |
---|
Делаем проще, шаблон не трогаем, помодифицируем $arResult (пример на коленке, поэтому тестируйте/правьте сами). Итак, копируем папку с дефолтным шаблоном компоненты в нужный шаблон сайта, создаем в папке файл result_modifier.php (что это такое — по ссылке в моем предыдущем сообщении) c примерно следующим содержимым: |
Спасибо, andreya, за код. Единственное что, при редактировании уже существующего эл-та, в форму не передается установленное значение свойства. Но это решилось просто. К массиву значений свойства нужно добавить и ID привязаных элементов.
Цитата |
---|
andreya пишет: while($arElement = $dbAllElements->Fetch()) <$arAllElements[$arElement[‘ID’]] = array(‘VALUE’=>$arElement[‘NAME’]); > |
Цитата |
---|
Дмитрий Савин пишет: Товарищи, подскажите, в каком направлении искать решение проблемы? Пытаюсь реализовать заполнение свойства привязки к элементам через компонент формы добавления/редактирования элементов инфоблока с помощью предложенного варианта через result_modifier.php. Сам список со значениями выводится успешно при отображении компонента, однако при добавлении элемента выбранное значение этого свойства не сохраняется. |
Привет, я поступил следующим образом , кастомизировал компонент. Для возможности выбора полей данного типа (Привязка к элементам в виде списка) при настройке компонента нужно добавить в файл .parameters :
if (in_array($arr[«PROPERTY_TYPE»], array(«L», «N», «S», «F», «E»)))
ДАЛЕЕ в component ищеш код :
if ( $arProperty[«PROPERTY_TYPE»] == «L»)
<
$rsPropertyEnum = CIBlockProperty::GetPropertyEnum($arProperty[«ID»]);
$arProperty[«ENUM»] = array();
while ($arPropertyEnum = $rsPropertyEnum->GetNext())
<
$arProperty[«ENUM»][$arPropertyEnum[«ID»]] = $arPropertyEnum;
>
>
и дополняешЬ его выборкой полей из инфоблока:
if ( $arProperty[«PROPERTY_TYPE»] == «E»)
<
$arSelect1 = Array(«ID»,»NAME»);
$arFilter1 = Array( «IBLOCK_ID»=>$arProperty[‘LINK_IBLOCK_ID’] , «ACTIVE_DATE»=>»Y», «ACTIVE»=>»Y»);
$dbAllElements = CIBlockElement::GetList(Array(), $arFilter1, false, false, $arSelect1);
$arProperty[«ENUM»] = array();
while ($arPropertyEnum = $dbAllElements->Fetch())
<
$arProperty[«ENUM»][$arPropertyEnum[«ID»]] = array(‘VALUE’=>$arPropertyEnum[‘NAME’],’ID’=>$arPropertyEnum[‘ID’]);
>
Далее ищешЬ все обработчики PROPERTY_TYPE=»L» и дополняешЬ их обработчиком PROPERTY_TYPE=»E»
После этого в шаблоне проверяешЬ поступление данных :
echo «»;
если данные поступают дополняешЬ шаблон:
case «L»:
case «E»:
По-моему Всё. ЕСЛИ ЧТО ПИШИ ВЫЛОЖУ ФАЙЛЫ .
Источник
int CIBlockElement::Add( array arFields, bool bWorkFlow = false, bool bUpdateSearch = true );
Adds a new element to an information block.
Parameters
Parameter | Description |
---|---|
arFields | An array of the format Array(«field»=>»value», …) containing values of the element fields of an information block. May also contain the field PROPERTY_VALUES, which is an array of the element properties in the format Array(«property code»=>»value»). The property code can be either numeric or mnemonic property code. For more information on properties, see CIBlockElement::SetPropertyValues() |
bWorkFlow |
If true, the new element is added in the workflow mode. If the Workflow module is installed, this operation is journalled in the element log. Optional. By default, elements are added without the workflow features. |
bUpdateSearch |
Tells to index the new element in the search engine. To speed up processing when adding a large set of elements, set this parameter to false and re-index the search database later. Optional. |
Return Values
The method returns the ID of the added element on success. In case of failure
returns false and sets the property LAST_ERROR to the error description text.
See Also
Example
<? $el = new CIBlockElement; $PROP = array(); $PROP[12] = "White"; // property with code 12 is assigned value "White" $PROP[3] = 38; // property with code 3 is assigned value 38 $arLoadProductArray = Array( "MODIFIED_BY" => $USER->GetID(), // element modified by the current user "IBLOCK_SECTION" => false, // put element in the root "IBLOCK_ID" => 18, "PROPERTY_VALUES"=> $PROP, "NAME" => "element", "ACTIVE" => "Y", // active "PREVIEW_TEXT" => "brief text", "DETAIL_TEXT" => "detailed text", "DETAIL_PICTURE" => CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]."/image.gif") ); if($PRODUCT_ID = $el->Add($arLoadProductArray)) echo "New ID: ".$PRODUCT_ID; else echo "Error: ".$el->LAST_ERROR; ?>
© «Bitrix24», 2001-2023
Up
Чтобы, добавить элемент в инфоблок, нам поможет крутой класс CIBlockElement;
Если вы планируете добавлять новые элементы в инфоблок в отдельном файле для начала нужно подключить prolog_before.php
Код PHP #1
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); ?>
Далее обязательно нужно инициализировать сам класс $el = new CIBlockElement; Иначе ничего не будет работать.
Растягивать -эту инструкцию не буду, а думаю стоит сразу показать полный код. Тем более здесь нет ничего сложного, думаю у Вас всё получится
Код PHP #2
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); // это подключаем если код ниже будет исполняться в отдельном файле php
CModule::IncludeModule('iblock'); // это подключит нужный класс для работы с инфоблоком
$el = new CIBlockElement; // обязательно указываем класс
$PROP = array(); // здесь у нас будут храниться свойства
$PROP[1] = 'значение'; // свойству с id 1 задаём значение
$PROP[2] = 'значение'; // свойству с id 2 задаём значение
$arLoadProductArray = Array(
"ACTIVE_FROM" => date('d.m.Y H:i:s'), // обязательно нужно указать дату начала активности элемента
"MODIFIED_BY" => $USER->GetID(), // указываем какой пользователь добавил элемент
"IBLOCK_SECTION_ID" => false, // В корне или нет
"IBLOCK_ID" => 25, // собственно сам id блока куда будем добавлять новый элемент
"NAME" => "Какое -то название записи",
"ACTIVE" => "Y", // активен или N не активен
"PREVIEW_TEXT" => "Какое-то описание",
"DETAIL_TEXT" => "Детальный текст",
"PROPERTY_VALUES"=> $PROP, // Добавим нашему элементу заданные свойства
"DETAIL_PICTURE" => CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]."/images.png") // ссылка на детальную картинку
);
if($newElement = $el->Add($arLoadProductArray)) // с помощью Add добавляем новый элемент
echo "ID Нового элемента: ".$newElement;
else
echo "Error: ".$el->LAST_ERROR;
?>
Returns a list of available fields for filtering and a list of custom handlers.
336 {
337 $availableFields = array(«ID», «ACTIVE», «NAME», «TAGS», «XML_ID», «EXTERNAL_ID», «PREVIEW_TEXT»,
338 «PREVIEW_TEXT_TYPE», «PREVIEW_PICTURE», «DETAIL_TEXT», «DETAIL_TEXT_TYPE», «DETAIL_PICTURE»,
339 «CHECK_PERMISSIONS», «PERMISSIONS_BY», «CATALOG_TYPE», «MIN_PERMISSION», «SEARCHABLE_CONTENT»,
340 «SORT», «TIMESTAMP_X», «DATE_MODIFY_FROM», «DATE_MODIFY_TO», «MODIFIED_USER_ID», «MODIFIED_BY»,
341 «DATE_CREATE», «CREATED_USER_ID», «CREATED_BY», «DATE_ACTIVE_FROM», «DATE_ACTIVE_TO», «ACTIVE_DATE»,
342 «ACTIVE_FROM», «ACTIVE_TO», «SECTION_ID»);
343
344 $listCustomFields = [];
345
346 $fields = $this->listObject->getFields();
347
348 foreach ($fields as $field)
349 {
350 if ($field[«CODE»] <> »)
351 {
352 $availableFields[] = «PROPERTY_».$field[«CODE»];
353 }
354
355 if ($this->isFieldDateType($field[«TYPE»]))
356 {
357 $callback = $field[«PROPERTY_USER_TYPE»][«ConvertToDB»];
358 $listCustomFields[$field[«FIELD_ID»]] = function ($value) use ($callback) {
359 $regexDetectsIso8601 = ‘/^([+-]?d{4}(?!d{2}b))’
360 . ‘((-?)((0[1-9]|1[0-2])(3([12]d|0[1-9]|3[01]))?’
361 . ‘|W([0-4]d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]d’
362 . ‘|[12]d{2}|3([0-5]d|6[1-6])))([Ts]((([01]d|2[0-3])’
363 . ‘((:?)[0-5]d)?|24:?00)([.,]d+(?!:))?)?(17[0-5]d’
364 . ‘([.,]d+)?)?([zZ]|([+-])([01]d|2[0-3]):?([0-5]d)?)?)?)?$/’;
365 if (preg_match($regexDetectsIso8601, $value) === 1)
366 {
367 return CRestUtil::unConvertDateTime($value);
368 }
369 elseif (is_callable($callback))
370 {
371 return call_user_func_array($callback, [[], [«VALUE» => $value]]);
372 }
373 else
374 {
375 return $value;
376 }
377 };
378 }
379 }
380
381 $availableFields = array_merge($availableFields, array_keys($fields));
382
383 return array($availableFields, $listCustomFields);
384 }
Элементы
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 в документации битрикса