Размер шрифта
Цвет фона и шрифта
Изображения
Озвучивание текста
Обычная версия сайта
«8 Ядер» - готовые сайты, интернет-магазины на 1С-Битрикс
Сертифицированный партнёр 1С-Битрикс Аккредитация на портале Госзакупок 44-ФЗ и 223-ФЗ Участник Московского инновационного кластера
+7 906 740 88 03
+7 906 740 88 03
E-mail
customer@8cores.ru
Адрес
г. Москва, ул. Окская, 20к2, пом. 5/1
Режим работы
Пн. – Пт.: с 08:00 до 18:00 (мск)
Продукты
  • Готовые сайты
    • Интернет-магазины
    • Корпоративные сайты
    • Отраслевые сайты
  • Лицензии 1С-Битрикс
  • Продления лицензий
Услуги
  • Разработка сайтов и приложений
    • Запуск сайта на готовом решении 1С-Битрикс
    • Хостинг. Регистрация доменов
    • Разработка сайтов
    • Перенос сайта на 1С-Битрикс
    • Разработка модулей для 1С-Битрикс
    • Лендинг/визитка
  • Интеграция
    • Интеграция сайта с 1С
    • Интеграция с CRM Битрикс24
    • ERP для Производственной компании
    • Интеграция с ФГИС "АРШИН"
    • Интеграция с ФГИС ФСА
  • Поддержка
    • Техническая поддержка
    • Доработка существующего сайта
  • Дизайн
    • Разработка дизайна сайта
  • Информационная безопасность
    • Проверка сайта и удаление вирусов
  • Импорт/Парсинг
Кейсы
  • Разработка сайта
  • Техподдержка сайта
  • Интеграция систем
Блог
Компания
  • О компании
  • Как мы работаем
  • Сертификаты
  • Реквизиты
  • Документы
  • Партнёры
  • Вакансии
Контакты
Москва
«8 Ядер» - готовые сайты, интернет-магазины на 1С-Битрикс
Сертифицированный партнёр 1С-Битрикс Аккредитация на портале Госзакупок 44-ФЗ и 223-ФЗ Участник Московского инновационного кластера
Продукты
  • Готовые сайты
    Готовые сайты
  • Лицензии 1С-Битрикс
    Лицензии 1С-Битрикс
  • Продления лицензий
    Продления лицензий
Услуги
  • Разработка сайтов и приложений
    Разработка сайтов и приложений
  • Интеграция
    Интеграция
  • Поддержка
    Поддержка
  • Дизайн
    Дизайн
  • Информационная безопасность
    Информационная безопасность
  • Импорт/Парсинг
    Импорт/Парсинг
Кейсы
  • Разработка сайта
  • Техподдержка сайта
  • Интеграция систем
Блог
Компания
  • О компании
  • Как мы работаем
  • Сертификаты
  • Реквизиты
  • Документы
  • Партнёры
  • Вакансии
Контакты
    Москва
    +7 906 740 88 03
    +7 906 740 88 03
    E-mail
    customer@8cores.ru
    Адрес
    г. Москва, ул. Окская, 20к2, пом. 5/1
    Режим работы
    Пн. – Пт.: с 08:00 до 18:00 (мск)
    «8 Ядер» - готовые сайты, интернет-магазины на 1С-Битрикс
    Продукты
    • Готовые сайты
      Готовые сайты
    • Лицензии 1С-Битрикс
      Лицензии 1С-Битрикс
    • Продления лицензий
      Продления лицензий
    Услуги
    • Разработка сайтов и приложений
      Разработка сайтов и приложений
    • Интеграция
      Интеграция
    • Поддержка
      Поддержка
    • Дизайн
      Дизайн
    • Информационная безопасность
      Информационная безопасность
    • Импорт/Парсинг
      Импорт/Парсинг
    Кейсы
    • Разработка сайта
    • Техподдержка сайта
    • Интеграция систем
    Блог
    Компания
    • О компании
    • Как мы работаем
    • Сертификаты
    • Реквизиты
    • Документы
    • Партнёры
    • Вакансии
    Контакты
      Москва
      +7 906 740 88 03
      E-mail
      customer@8cores.ru
      Адрес
      г. Москва, ул. Окская, 20к2, пом. 5/1
      Режим работы
      Пн. – Пт.: с 08:00 до 18:00 (мск)
      «8 Ядер» - готовые сайты, интернет-магазины на 1С-Битрикс
      Телефоны
      +7 906 740 88 03
      E-mail
      customer@8cores.ru
      Адрес
      г. Москва, ул. Окская, 20к2, пом. 5/1
      Режим работы
      Пн. – Пт.: с 08:00 до 18:00 (мск)
      «8 Ядер» - готовые сайты, интернет-магазины на 1С-Битрикс
      • Продукты
        • Продукты
        • Готовые сайты
          • Готовые сайты
          • Интернет-магазины
          • Корпоративные сайты
          • Отраслевые сайты
        • Лицензии 1С-Битрикс
        • Продления лицензий
      • Услуги
        • Услуги
        • Разработка сайтов и приложений
          • Разработка сайтов и приложений
          • Запуск сайта на готовом решении 1С-Битрикс
          • Хостинг. Регистрация доменов
          • Разработка сайтов
          • Перенос сайта на 1С-Битрикс
          • Разработка модулей для 1С-Битрикс
          • Лендинг/визитка
        • Интеграция
          • Интеграция
          • Интеграция сайта с 1С
          • Интеграция с CRM Битрикс24
          • ERP для Производственной компании
          • Интеграция с ФГИС "АРШИН"
          • Интеграция с ФГИС ФСА
        • Поддержка
          • Поддержка
          • Техническая поддержка
          • Доработка существующего сайта
        • Дизайн
          • Дизайн
          • Разработка дизайна сайта
        • Информационная безопасность
          • Информационная безопасность
          • Проверка сайта и удаление вирусов
        • Импорт/Парсинг
      • Кейсы
        • Кейсы
        • Разработка сайта
        • Техподдержка сайта
        • Интеграция систем
      • Блог
      • Компания
        • Компания
        • О компании
        • Как мы работаем
        • Сертификаты
        • Реквизиты
        • Документы
        • Партнёры
        • Вакансии
      • Контакты
      • +7 906 740 88 03
        • Телефоны
        • +7 906 740 88 03
      • г. Москва, ул. Окская, 20к2, пом. 5/1
      • customer@8cores.ru
      • Пн. – Пт.: с 08:00 до 18:00 (мск)
      Сертифицированный партнёр 1С-Битрикс Аккредитация на портале Госзакупок 44-ФЗ и 223-ФЗ Участник Московского инновационного кластера
      Главная
      —
      Блог
      —
      1С-Битрикс
      —Перенос изображений разделов каталога с одного сайта на другой

      Перенос изображений разделов каталога с одного сайта на другой

      перенос изображений разделов каталога с одного сайта на другой
      1С-Битрикс
      18 сентября 2024

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

      Получаем список разделов с изображениями в json формате

      require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');
      
      if(!CModule::IncludeModule("catalog")){die();}
      
      
      $arFilter=[
          'IBLOCK_ID' => 17,
          'IBLOCK_TYPE' => '1c_catalog',
          //'ACTIVE' => 'Y'
      ];
      
      $arSelect = [
          "ID", "NAME", "CODE", "PICTURE", "PREVIEW_PICTURE", "DETAIL_PICTURE", "SECTION_PAGE_URL"
      ];
      
      //Получаем перечень разделов инфоблока
      $sections = CIBlockSection::GetTreeList($arFilter, $arSelect);
      
      while($ar_dep = $sections->GetNext())
      {
          if(!empty($ar_dep['PICTURE']) || !empty($ar_dep['DETAIL_PICTURE'])){
      		//Если у раздело задано изображение
              $result[$ar_dep['CODE']] = $ar_dep;
      
              $img = $ar_dep['PICTURE'] ? $ar_dep['PICTURE'] : $ar_dep['DETAIL_PICTURE'];
      
              $result[$ar_dep['CODE']]['SRC'] = CFile::GetPath($img);
      
          }else{
      
              Получаем последний товар именно в нужный раздел
              $elementIterator = \Bitrix\Iblock\ElementTable::getList([
                  'select' => [
                      "ID", "NAME", "PREVIEW_PICTURE", "DETAIL_PICTURE", "IBLOCK_SECTION_ID", "CODE",
                  ],
                  'filter' => [
                      '=IBLOCK_ID' => 17,
                      '=IBLOCK_SECTION_ID' => $ar_dep['ID'],
                      '=ACTIVE' => 'Y',
                      '!=DETAIL_PICTURE' => '',
                  ],
                  'order' => ['ID' => 'DESC'], // сортировка
                  'limit' => 1,
              ]);
      
              $elems = $elementIterator->fetchAll();
      
      		//Если товар в разделе найден, то записываем src изображений
              foreach ($elems as $element) {
                  $result[$ar_dep['CODE']] = $ar_dep;
      
                  $img = $element['DETAIL_PICTURE'] ? $element['DETAIL_PICTURE'] : $element['PREVIEW_PICTURE'];
      
                  $result[$ar_dep['CODE']]['SRC'] = CFile::GetPath($img);
                  $result[$ar_dep['CODE']]['DETAIL_PAGE_URL'] = $element['CODE'];
              }
      
      		//Если src не найден
              if(!isset($result[$ar_dep['CODE']]['SRC'])){
      			//Ищем первый попавшийся товар входящий в данный раздел или любой подраздел данного раздела
                  $rsResult = CIBlockElement::GetList(
                      array( "SORT"=>"ASC" ),
                      array(
                          "ACTIVE"        => "Y",
                          "IBLOCK_ID"        => 17,
                          "SECTION_ID"     => $ar_dep['ID'],
                          "INCLUDE_SUBSECTIONS" => "Y",
                      ),
                      false,
                      $arNavStartParams = Array("nTopCount"=>1),
                      array("ID", "NAME", "PREVIEW_PICTURE", "DETAIL_PICTURE", "IBLOCK_SECTION_ID", "CODE")
                  );
      
                  while( $obElement = $rsResult->GetNext()) {
                      $result[$ar_dep['CODE']] = $obElement;
      
                      $img = $obElement['DETAIL_PICTURE'] ? $obElement['DETAIL_PICTURE'] : $obElement['PREVIEW_PICTURE'];
      
                      $result[$ar_dep['CODE']]['SRC'] = CFile::GetPath($img);
                      $result[$ar_dep['CODE']]['DETAIL_PAGE_URL'] = $obElement['CODE'];
      
                  }
              }
      
          }
      
      }
      
      //Функция для исправления кодировки получаемых данных
      //Если json_encode не работает
      function safe_json_encode($value, $options = 0, $depth = 512){
          $encoded = json_encode($value, $options, $depth);
          switch (json_last_error()) {
              case JSON_ERROR_NONE:
                  return $encoded;
              case JSON_ERROR_DEPTH:
                  return 'Maximum stack depth exceeded'; // or trigger_error() or throw new Exception()
              case JSON_ERROR_STATE_MISMATCH:
                  return 'Underflow or the modes mismatch'; // or trigger_error() or throw new Exception()
              case JSON_ERROR_CTRL_CHAR:
                  return 'Unexpected control character found';
              case JSON_ERROR_SYNTAX:
                  return 'Syntax error, malformed JSON'; // or trigger_error() or throw new Exception()
              case JSON_ERROR_UTF8:
                  $clean = utf8ize($value);
                  return safe_json_encode($clean, $options, $depth);
              default:
                  return 'Unknown error'; // or trigger_error() or throw new Exception()
      
          }
      }
      
      function utf8ize($mixed) {
          if (is_array($mixed)) {
              foreach ($mixed as $key => $value) {
                  $mixed[$key] = utf8ize($value);
              }
          } else if (is_string ($mixed)) {
              return utf8_encode($mixed);
          }
          return $mixed;
      }
      
      
      echo safe_json_encode($result);
      Обновляем найденные совпадающие по code разделы

      require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');
      
      $arTotal = array();
      
      $url = 'Путь к файлу c оыщт';
      
      $postdata = array();
      
      $post = http_build_query($postdata);
      $ch = curl_init($url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
      curl_setopt($ch, CURLOPT_POST, 1);
      curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
      $response = curl_exec($ch);
      curl_close($ch);
      
      //Преобразовываем std в массив
      $response = json_decode($response, True);
      
      $arTotal['Получено разделов'] = count($response);
      
      if(!CModule::IncludeModule("iblock")){die();}
      
      $IDS = $KEYS = $ERRORS = array();
      
      foreach ($response as $key => $value){
          $IDS[$key]['SRC'] = $value['SRC'];
          array_push($KEYS,$key);
      }
      
      $arFilter = Array('IBLOCK_TYPE'=>'1c_catalog', 'IBLOCK_ID'=>22, 'GLOBAL_ACTIVE'=>'Y', 'CODE'=>$KEYS);
      $db_list = CIBlockSection::GetList(Array($by=>$order), $arFilter, true);
      
      $i = $obnovleno = $neobnovleno = 0;
      while($ar_result = $db_list->GetNext()) {
      
          $src = 'SERVER_ADRESS'.$IDS[$ar_result['CODE']]['SRC'];
          $arFile = CFile::MakeFileArray($src);
      
          $arPICTURE = $arFile;
          $arPICTURE["MODULE_ID"] = "iblock";
      
          $bs = new CIBlockSection;
      
          $arFields = Array(
              "PICTURE" => $arPICTURE,
          );
      
          $res = $bs->Update($ar_result['ID'], $arFields, false, false, true);
      
          if($res){
              $obnovleno++;
          }else{
              $neobnovleno++;
              array_push($ERRORS,$res->LAST_ERROR);
          }
      
          $i++;
      }
      
      $arTotal['Найдено разделов на новом сайте'] = $i;
      $arTotal['Обновлено разделов на новом сайте'] = $obnovleno;
      $arTotal['Ошибок обновления разделов на новом сайте'] = $neobnovleno;
      $arTotal['Перечень ошибок'] = $ERRORS;
      • Комментарии
      Загрузка комментариев...
      Назад к списку
      • 1С Администрирование 2
      • 1С-Битрикс 30
      • HTML/CSS 1
      • jQuery 2
      • PHP 2
      • Оптимизация 9
      1с 1С ajax apache api bitrix clean-param CRM cron curl etext get google htaccess html jivo jquery json market marketplace nginx openserver PageSpeed php php8 post robots robots.txt search seo web агенты администрирование артикул аспро битрикс боты вирус директория защита каталог композит кэш логи магазин маркетплейс метрика модальные окна настройка обмен онлайн консультант оптимизация ордер ошибки пагинация папка парсинг поиск покупка сервера склад скрипт спам страница тестирование троян ускорение установка ут цвета чпу юkassa яндекс
      Продукты
      Услуги
      Компания
      Блог
      Контакты
      Сертифицированный партнёр 1С-Битрикс Аккредитация на портале Госзакупок 44-ФЗ и 223-ФЗ Участник Московского инновационного кластера
      +7 906 740 88 03
      +7 906 740 88 03
      E-mail
      customer@8cores.ru
      Адрес
      г. Москва, ул. Окская, 20к2, пом. 5/1
      Режим работы
      Пн. – Пт.: с 08:00 до 18:00 (мск)
      customer@8cores.ru
      г. Москва, ул. Окская, 20к2, пом. 5/1
      © 2010-2025 «8 Ядер» - веб-студия полного цикла
      Политика конфиденциальности
      Разработано в