Код |
---|
if(CModule::IncludeModule("iblock")){ $id_catalog = 8; $prop = []; $order = ['ID' => 'ASC']; $filter = ['IBLOCK_ID' => $id_catalog]; $rows = CIBlockElement::GetList($order, $filter); while ($row = $rows->fetch()) { $row['PROPERTIES'] = []; $prop[$row['ID']] =& $row; unset($row); } //Получаю массив со всеми свойствами всех элементов CIBlockElement::GetPropertyValuesArray($prop, $filter['IBLOCK_ID'], $filter); unset($rows, $filter, $order); //перезаписываю в массив $arCodeValue нужное свойство $arCodeValue = []; foreach ($prop as $key => $value) { if(!empty($value)){ while(strstr($value['PROPERTIES']['VOLUME']['VALUE'], ',')){ $value['PROPERTIES']['VOLUME']['VALUE'] = str_replace(',','.',$value['PROPERTIES']['VOLUME']['VALUE']); $arCodeValue[$key] = [$value['PROPERTIES']['VOLUME']['ID'] => $value['PROPERTIES']['VOLUME']['VALUE']]; } }else echo 'empty'; } //До этого всё выполняется быстро, а последний цикл как раз даёт много запросов бд //Записываю массив $arCodeValue при помощи SetPropertyValuesEx //Сохраняю при помощи Update foreach ($prop as $key => $value) { if(!empty($value) && strstr($value['PROPERTIES']['VOLUME']['VALUE'], ',')){ CIBlockElement::SetPropertyValuesEx($key, $id_catalog, $arCodeValue[$key]); $elthis = new CIBlockElement; $elthis->Update( $key, [ 'WF_STATUS_ID' => 1, 'ACTIVE' => 'Y' ], true ); echo $key; echo ' '; unset($elthis); } } } |
Массовая перезапись свойства элемента в каталоге
Владислав: 18.11.2022 19:26:27
Здравствуйте, нужно обновить определённое свойство, а точнее его перезаписать так как с 1С приходят данные с запятой, а нужны в общем то с точкой. Написал следующий скрипт, но не нашёл в Апи битрикса как записать 1 запросом данные, я так понимаю на каждый setProperyValueEx и Update идёт запрос к базе, ну следовательно вылезает что время запроса к базе превышено и скрипт выполняется не полностью. Если поставить время запроса больше то отваливается апач от браузера, тестил на локальном сервере. Подскажите как это всё грамотно сделать пожалуйста.
|
Михаил Базаров: 18.11.2022 22:16:44
Не сильно вчитался в скрипт, но не очень понял зачем:
CIBlockElement::SetPropertyValuesEx и без этого должно сохранить значение. Если совсем много, сделайте скрипт пошаговым. Пример тут, там не очень феншуйно и немного говнокодства, но если единоразово нужен, вполне сгодится. https://bazarow.ru/forum/forum11/641-poshagovaya-obrabotka-bolshogo-kolichestva-elementov-infobloka_-bystro-skript |
Владислав: 20.11.2022 15:44:58
|
1С-Битрикс на моем Boosty канале
Блог-note: заметки разработчика
Показ страницы сайта в боковом слайдере, на примере всплывающей формы обратной связи.
Если вы хотите сделать подгрузку любой страницы сайта в боковой слайдер, для этого в битриксе есть метод BX.SidePanel.In...
Обновить страницу Inapbrowser в приложении Apache Cordova, при выходе из фона
Задача: Мобильное приложение, созданное на Apache Cordova должно перезагрузить текущую страницу, открытую с помощью плаг...
Вывод элементов с помощью API битрикс
Иногда, выводить элементы инфоблока с помощью компонентов, может оказаться избыточным. Например, если нужно вывести элем...
Бонус за выполненный заказ на внутренний счет пользователя
Задача: после того как заказ, в интернет-магазине, перешел в статус "Выполнен" начислить пользователю 5% от стоимости за...
Заполнить коэффициент единицы измерения (MEASURE_RATIO) из свойства элемента
Задача: Каталог наполняется из 1С, но 1С не передает коэффициент единицы измерения (особенность конкретной 1С, но во...
Вывести артикул в печатную форму бланка заказа
Задача: в печатную форму бланка заказа добавить артикулы товаров и данные о пользователе.
Обновление 1С-Битрикс с PHP 7, до поддержки версии PHP 8.3
Задача: обновить устаревший сайт на платформе 1С-Битрикс, который не получал обновлений уже более 4 лет и работает на PH...
Заполнить инфоблок брендов из свойства инфоблока с товарами
Задача: в интернет-магазине есть инфоблок с товарами, загружаемый из 1С, у которого заполнено свойство "Производите...
Фотогалерея на базе компонента новостей, с fancybox.
Это заметка обновление к очень старой, уже имеющейся на сайте. Сделаем что-то типа фотогалереи на базе встроеннного в би...