| Код |
|---|
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);
}
}
}
|
Массовая перезапись свойства элемента в каталоге
Вопросы и ответы по 1С-Битрикс, разборы реальных задач и обсуждение заметок блога. Задайте вопрос или помогите другим — все сообщения проходят модерацию.
|
Владислав: 18.11.2022 07:00:00
Здравствуйте, нужно обновить определённое свойство, а точнее его перезаписать так как с 1С приходят данные с запятой, а нужны в общем то с точкой. Написал следующий скрипт, но не нашёл в Апи битрикса как записать 1 запросом данные, я так понимаю на каждый setProperyValueEx и Update идёт запрос к базе, ну следовательно вылезает что время запроса к базе превышено и скрипт выполняется не полностью. Если поставить время запроса больше то отваливается апач от браузера, тестил на локальном сервере. Подскажите как это всё грамотно сделать пожалуйста.
|
|
Михаил Базаров: 18.11.2022 10:00:00
Не сильно вчитался в скрипт, но не очень понял зачем:
CIBlockElement::SetPropertyValuesEx и без этого должно сохранить значение. Если совсем много, сделайте скрипт пошаговым. Пример тут, там не очень феншуйно и немного говнокодства, но если единоразово нужен, вполне сгодится. https://bazarow.ru/forum/forum11/641-poshagovaya-obrabotka-bolshogo-kolichestva-elementov-infobloka_-bystro-skript |
|
Владислав: 20.11.2022 03:00:00
|
Индивидуальный предприниматель
- mihail@bazarow.ru
- Открыть чат в МАКС
- ВКонтакте
- Перейти в Telegram
- Связаться через сайт
Работаю официально, с заключением договора и предоставлением всех закрывающих документов.
Заметки по 1С-Битрикс
-
Определить местоположение пользователя и показать магазины поблизости.
Задача: в мобильном приложении, которое открывает сайт на 1С-Битрикс внутри себя, нужно определить местоположение пользователя и показать близжайшие к...
-
Показать пользователей онлайн на странице сайта
Задача: показать на странице сайта пользователей которые сейчас находятся на сайте. Используется штатный модуль "Веб-аналитика" - должен быт...
-
Мобильные версии страниц и поисковые системы
Согласно требования поисковых систем: Яндекс и Google, в случае если у вашего сайта имеется мобильная версия, нужно уведомить поисковые системы о нали...
-
Композитный сайт на 1С-Битрикс
Для новых клиентов: Все новые проекты будут включать в себя применение технологии "Композитный сайт" - данная услуга уже включена в стоимость разработ...
-
Получение списка Highload блоков с помощью API Битрикс
1С-Битрикс предоставляет мощный инструментарий для обеспечения эффективной работы ваших проектов. Одним из способов управления Highload блоками в Битр...
-
Сгенерировать скидочные купоны, при заказе и отправить на почту
Задача: после того как пользователь сделал заказ, нужно сгенерировать одноразовые купоны для скидки (правила корзины) и отправить, эти купоны, на почт...