Ciblockelement add error

Метод добавляет новый элемент информационного блока. Перед добавлением элемента вызываются обработчики события OnBeforeIBlockElementAdd, из которых можно изменить значения полей или отменить добавление элемента вернув сообщение об ошибке. После добавления элемента вызывается событие OnAfterIBlockElementAdd. Нестатический метод.

Описание

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
08.08.2021 23:45:48

Не хватает в примерах: вставки изображения в PREVIEW_PICTURE (или DETAIL_PICTURE) со стороннего сайта:

Код
$fields = [
...
"PREVIEW_PICTURE"   => CFile::MakeFileArray(http://example.net/image.jpg),
...
];

1

Anton Lytko
21.07.2020 16:51:07

Код
// добавление свойства типа Справочник (дополнение к Примеру 2)

$arrProp = Array();
$arrProp[ID или CODE]['VALUE'] = $UF_XML_ID;

1

Михаил Базаров
15.04.2020 19:32:28

Код
$arMorePhoto["VALUE"];
$i = 0;
foreach ($_POST["MORE_PHOTO"] as $morePhoto) {
  $arMorePhoto['n'.$i] = array("VALUE"=>CFile::MakeFileArray($morePhoto));
  $i++;
}

3

Антон Царук
13.12.2016 16:45:43

Для установки дат DATE_ACTIVE_FROM и DATE_ACTIVE_TO используется формат сайта: d.m.Y. Передавать даты в формате БД — не получается…

7

Антон Царук
26.11.2015 11:12:52

Помимо «PROPERTY_VALUES» в массиве полей может быть еще и сверхсекретный массив с ключом «RIGHTS» — с его помощью можно настроить расширенный доступ к элементу инфоблока.
Например, передавая в качестве $arFields вот такой массив

Код
'RIGHTS'=>array("n0" => array("GROUP_CODE" => "U777", "DO_CLEAN" => "N", "TASK_ID" => 34)

можно установить доступ к элементу для определенного пользователя c ID=777. 34 — это ID права доступа «Изменение» в модуле «Инфоблоки» (ID от проекта к проекту может быть разное, надо смотреть в «Правах доступа» правильное значение)

3

Илья Кругляков
04.08.2015 10:31:30

Может кому пригодится. Если вы собираетесь добавляемый элемент данным методом далее отправить в корзину, то перед добавлением его в корзину необходимо воспользоваться методом CCatalogProduct::Add. Который добавляет параметры товара к элементу каталога. Иначе он не будет добавлен в корзину.

1

Илья Карев
21.04.2015 17:24:59

Код
//пример массива для вставки видео
$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 .

но для фото надо использовать CFile::MakeFileArray($filename);
$filename должен начинаться с $_SERVER[‘DOCUMENT_ROOT’]

Код
$PROP["MORE_PHOTO"] = Array (
    "n0" => Array(
        "VALUE" => CFile::MakeFileArray($filename)
     )
);

24

Владислав Ухов
07.09.2014 19:18:40

Для привязки элемента к нескольким разделам инфоблока используйте ключ
IBLOCK_SECTION (массив из ID разделов.) вместо IBLOCK_SECTION_ID

© «Битрикс», 2001-2023, «1С-Битрикс», 2023

Наверх

Содержание

  1. Bitrix element add error
  2. Открытые члены
  3. Поля данных
  4. Подробное описание
  5. Конструктор(ы)
  6. ◆ __construct()
  7. Методы
  8. ◆ delete()
  9. ◆ getAvailableFields()
  10. ◆ getErrorByCode()
  11. ◆ getErrors()
  12. ◆ getFileUrl()
  13. Самодельная форма добавления элемента на API Битрикс
  14. Создаем форму на произвольной странице сайта или в основном шаблоне
  15. Видео: Форма добавления через API
  16. Загрузка множественного свойства типа файл
  17. Мои каналы:
  18. Записная книжка разработчика
  19. «Добавление элементов инфоблока 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()
and CIBlockElement::SetPropertyValueCode()

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

  • CIBlockElement::Update
  • CIBlockElement::SetPropertyValues()
  • CIBlockElement::SetPropertyValueCode()

    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; 
    ?>

    Элементы

    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 в документации битрикса

    Количество показов: 18221
    Дата создания: 26.05.2016 18:46:17

    Добавление элемента в инфоблок AJAX, без компонента с использованием API 1С-Битрикс, а так же загрузка изображений анонса, детальной страницы, свойства и доп изображения элемента множественное свойство типа файл 

    Для вызова формы в всплывающем окне в  /bitrix/templates/Ваш_шаблон/header.php подключаем bootstrat.js и bootstrap.css, (bootstrat.js и bootstrap.css) можно кастомизировать и подключить то, что отвечает за вызов диалоговой окна и стили формы

    Создаем форму добавления элемента и добавляем например  /bitrix/templates/Ваш_шаблон/footer.php

    //Кнопка для вызова формы в всплывающем окне
    
    <button data-toggle="modal" data-target="#add-product-modal" class="btn_blue add-ad">Разместить объявление</button>	
    <div id="add-product-modal" class="modal fade add-product-modal" role="dialog"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true"></span></button> <h4 class="modal-title">Разместить свое объявление</h4> </div> <div class="modal-body"> <div class="message error hide"></div> <form id="add-product-form" enctype="multipart/form-data"> <fieldset class="form-group"> <label>Заголовок</label> <input type="text" name="name" class="form-control" maxlength="255" placeholder="Например, продажа вещей"> </fieldset> <fieldset class="form-group"> <label>Подробное описание</label> <textarea name="description" class="form-control" rows="3" placeholder="Описание..."></textarea> </fieldset> <fieldset class="form-group"> <div class="upload-div"> <label>Главное фото товара(jpg, png, gif)</label> <label> <input type="file" name="image"> </label> </div> <div> <label>Дополнительные фото(jpg, png, gif)</span></label> <span> <input type="file" name="more_photos[]">
    <input type="file" name="more_photos[]"> <input type="file" name="more_photos[]"> </span> </div> </fieldset> <fieldset class="form-group"> <label for="formGroupInput">Ваши контакты</label> <div class="contact-icons"> <div class="icon-phone"></div> <div class="icon-email"></div> <div class="icon-skype"></div> </div> <input type="text" name="phone" class="form-control input-phone" placeholder="Укажите телефон"> <input type="text" name="email" class="form-control input-email hide" placeholder="Укажите Email"> <input type="text" name="skype" class="form-control input-skype hide" placeholder="Укажите Skype"> </fieldset> <div class="modal-footer"> <fieldset class="form-group"> <div> <button type="submit" class="btn_blue sale-submit">Разместить объявление</button> </div> </fieldset> </div> </form> </div> </div> </div> </div>

    1. Создаем папку  в шаблоне нашего сайта /bitrix/templates/Ваш_шаблон/js/
    2. в /bitrix/templates/Ваш_шаблон/js/  создаем файл main.js для наших js скриптов
    3. в шапке нашего шаблона /bitrix/templates/Ваш_шаблон/header.php подключаем jquery библиатеку и наш main.js
    4. в /bitrix/templates/Ваш_шаблон/main.js пишем код javascript  добавлении элемента 

    $(document).ready(function(){
    	
    	$('#add-product-form .submit').click(function(e){
    		
            var formData = new FormData($('#add-product-form')[0]); //используем FormData для загрузки изображении аноса детальной страницы и дополнительные фото элемента
    $.ajax({ type: 'POST', url: '/ajax/add_product.php', data: formData, // если загрузка файлов не нужно, можем место formData написать так $('#add-product-form').serialize()
    dataType: 'json', async: false, cache: false, contentType: false, processData: false, success: function(result){ if (result.status) { $(".add-product-modal .message").html(result.message); $(".add-product-modal .message").removeClass("hide");
    if (result.status=='success'){ $(".add-product-modal .message").removeClass("error");
    $(".add-product-modal .message").addClass("success");
    $('#add-product-form')[0].reset();
    } } } }); e.preventDefault(); return false; }); });
    1. В корне сайта создаем папку с именем ajax
    2. в эту папку создаем файл add_product.php и здесь пишем наш код добавления элемента
    <?php
    define("NO_KEEP_STATISTIC", true);
    define("NOT_CHECK_PERMISSIONS", true);
    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
    ?>
    
    <?
    if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'){
    
    	if( !empty($_REQUEST['name']) and !empty($_REQUEST['description']) ){
    		
    		CModule::IncludeModule('iblock'); 
    		
    		$el = new CIBlockElement;
    
    		$PROP = array();
    		$PROP['PHONE'] = $_POST['phone']; //Свойства могут быт разные это для пимера
    
    		$iblock_id = 6;
    		$section_id = false;
    		if($_POST['section_id']>0){ $section_id = $_POST['section_id'];}
    
    		for($i = 0; $i < count($_FILES["more_photos"]['name']); $i++){
    			
    			$file = Array('name' => $_FILES["more_photos"]['name'][$i],
    						  'size' => $_FILES["more_photos"]['size'][$i],
    						  'tmp_name' => $_FILES["more_photos"]['tmp_name'][$i],
    						  'type' => $_FILES["more_photos"]['type'][$i]
    					);
    			$arFiles[] = array('VALUE' => $file, 'DESCRIPTION' => '');
    		}
    		
    		$PROP['MORE_PHOTOS'] = $arFiles;  //Передаем массив файлов для для свойства MORE_PHOTOS (доп. фото элемента)
    		
    		$arFields = Array(
    		  "DATE_CREATE"  => date("d.m.Y H:i:s"), //Передаем дата создания
    		  "CREATED_BY"    => $GLOBALS['USER']->GetID(),	//Передаем ID пользователя кто добавляет	  
    		  "IBLOCK_SECTION_ID" => $section_id, //ID раздела ели есть
    		  "IBLOCK_ID"      => $iblock_id, //ID информационного блока
    		  "PROPERTY_VALUES"=> $PROP, // Передаем массив значении для свойств
    		  "NAME"           => strip_tags($_REQUEST['name']),
    		  "ACTIVE"         => "Y", //поумолчанию делаем активным или ставим N для отключении поумолчанию
    		  "PREVIEW_TEXT"   => mb_substr(strip_tags($_REQUEST['description']), 0, 100), //отрезаем лишнее и ограничиваем до 100 символов
    		  "DETAIL_TEXT"    => strip_tags($_REQUEST['description'], '<br></br><p>'), //отрезаем лишнее
    		  "PREVIEW_PICTURE" =>$_FILES['image'], //изображение для анонса
    		  "DETAIL_PICTURE" => $_FILES['image'] //изображение для детальной страницы
    		);
    
    		if($ID = $el->Add($arFields)){
    			$result['status'] = 'success';
    			$result['message'] = 'Элемент успешно добавлена';
    		}		 
    		else{
    			$result['status'] = 'error';
    			$result['message'] = $el->LAST_ERROR;
    		}
    		
    	}else{
    		$result['status'] = 'error';
    		$result['message'] = 'Все поля обязательны для заполнения';
    	}
    	
    	echo json_encode($result); //передаем результат формата JSON
    }
    ?>
    

    int 
     
    CIBlockElement::Add(

    array arFields,
    bool bWorkFlow = false,
    bool bUpdateSearch = true,
    bool bResizePictures = false
    );

    Метод
    добавляет новый элемент информационного блока. Перед добавлением элемента
    вызываются обработчики события OnBeforeIBlockElementAdd,
    из которых можно изменить значения полей или отменить добавление элемента вернув
    сообщение об ошибке. После добавления элемента вызывается событие OnAfterIBlockElementAdd.

    Параметры функции

    Параметр Описание
    arFields Массив вида Array(«поле»=>»значение», …), содержащий значения полей элемента инфоблоков и
    дополнительно может содержать поле «PROPERTY_VALUES» — массив со всеми
    значениями свойств элемента в виде массива Array(«код свойства»=>»значение
    свойства»). Где «код свойства» — числовой или мнемонический код свойства,
    «значение свойства» — одиночное значение, либо массив значений если свойство
    множественное. Дополнительно для сохранения значения свойств см: CIBlockElement::SetPropertyValues(),
    CIBlockElement::SetPropertyValueCode()
    bWorkFlow Вставка в режиме документооборота. Если true и модуль документооборота
    установлен, то данное добавление будет учтено в журнале изменения элемента. Не
    обязательный параметр, по умолчанию вставка в режиме документооборота отключена.
    bUpdateSearch Индексировать элемент для поиска. Для повышения производительности можно
    отключать этот параметр во время серии добавлений элементов, а после вставки
    переиндексировать поиск. Не обязательный параметр, по умолчанию элемент после
    добавления будет проиндексирован в поиске.
    bResizePictures Использовать настройки инфоблока для обработки изображений. По умоляанию
    настройки не применяются. Если этот параметр имеет значение true, то к полям
    PREVIEW_PICTURE и DETAIL_PICTURE будут применены правила генерации и
    масштабирования в соответствии с настройками информационного
    блока.

    Возвращаемое значение

    Метод возвращает код добавленного элемента
    инфоблока, если добавление прошло успешно. При возникновении ошибки метод вернет
    false, а в свойстве объекта LAST_ERROR будет содержаться текст ошибки.

    Примеры использования

    $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;
    ?>

    Понравилась статья? Поделить с друзьями:
  • Cisco anyconnect login error
  • Chrysler 300c ошибки
  • Chroot failed to run command bin bash exec format error
  • Chromedriver unknown error cannot find chrome binary
  • Chrome параллельная конфигурация неправильна как исправить windows 10