Меню
RSS
Массовая перезапись свойства элемента в каталоге
 
Здравствуйте, нужно обновить определённое свойство, а точнее его перезаписать так как с 1С приходят данные с запятой, а нужны в общем то с точкой. Написал следующий скрипт, но не нашёл в Апи битрикса как записать 1 запросом данные, я так понимаю на каждый setProperyValueEx и Update идёт запрос к базе, ну следовательно вылезает что время запроса к базе превышено и скрипт выполняется не полностью. Если поставить время запроса больше то отваливается апач от браузера, тестил на локальном сервере. Подскажите как это всё грамотно сделать пожалуйста.
Код
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);
      }
   }
}
 
Не сильно вчитался в скрипт, но не очень понял зачем:
Код
 $elthis = new CIBlockElement;
      $elthis->Update(
         $key,
         [ 'WF_STATUS_ID' => 1, 'ACTIVE' => 'Y' ],
         true
      );
      echo $key;

CIBlockElement::SetPropertyValuesEx и без этого должно сохранить значение.
Если совсем много, сделайте скрипт пошаговым. Пример тут, там не очень феншуйно и немного говнокодства, но если единоразово нужен, вполне сгодится.
https://bazarow.ru/forum/forum11/641-poshagovaya-obrabotka-bolshogo-kolichestva-elementov-infobloka_-bystro-skript
 
Код
$elthis = new CIBlockElement;
      $elthis->Update(
         $key,
         [ 'WF_STATUS_ID' => 1, 'ACTIVE' => 'Y' ],
         true
      );
      echo $key;
Этот код нужен чтобы умный фильтр работал, в апи битрикса снизу кто-то написал что этот код сохраняет последний черновик, чтобы это не значило. В общем только что тестил, CIBlockElement::SetPropertyValuesEx и правда сохраняет значение, но умный фильтр их не видит а если с этим кодом то в общем то видит, не знаю почему, но это так) Спасибо за пример пошаговости.
Читают тему
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить картинки
 

Блог-note: заметки разработчика

Если пользователь авторизован то... API Битрикс

Достаточно часто, при создании сайта на битрикс нужно вывести в шаблон или компонент, некую информацию, доступную только...

Вывести все товары, с постраничной навигацией, из всех разделов инфоблока

По сути, эта заметка, небольшой лайфхак. Достаточно часто нужно, в корне каталога, в ТОП-е товаров вывести все товары вс...

Установка поиска Sphinx на Ubuntu 22.04 для 1С-Битрикс

Задача: установить и сконфигурировать поиск Sphinx под управлением Ubuntu 22.04 и панели управления HestiaCP для использ...

Умный фильтр во всплывающей панели на мобильных.

Шаблон умного фильтра в Битриксе достаточно сложный, с точки зрения верстки и не очень красиво отображается на мобильных...

Вывести товары в каталоге перебрав их по свойству и разделив на секции.

Задача: В каталоге, у товаров, есть свойство типа список с названием "Тип изделия" и кодом "TIP_IZDELIYA&...

Почтовое событие на создание нового элемента инфоблока, через API

Иногда при разработке сайта требуется реализовать функционал добавления элементов инфоблока простыми пользователям.Будет...

Вывести минимальную и максимальную цену в разделе каталога Битрикс.

Что бы вывести минимальную и максимальную стоимость товаров, из каталога 1С-Битрикс, достаточно получить все товары мето...

Работа с пользователями через API D7 1С-Битрикс

Заметка написана на основе старого черновика, и все описанное было проверено на чистой установке 1С-Битрикс. Примеры раб...

Memcached на сайте под управлением битрикс, при использовании Веб Окружения Битрикс

Если вам важна скорость отдачи сайта, а у вашего сервера медленный диск для использования кеша на файлах. Можно кеширова...