Массово поменять картинки в каталоге 1С-Битрикс можно без ручного открытия каждой карточки. Способ выбирают по тому, откуда берутся изображения: из 1С по обмену, из CSV с внешними ссылками, по имени файла или через API. Ниже разбираем каждый вариант, его подводные камни и порядок действий, чтобы не потерять оригиналы и не сломать детейлы.
Как устроены изображения товара в каталоге
Прежде чем что-то менять массово, важно понимать структуру. У товара в инфоблоке есть два «системных» поля картинки: PREVIEW_PICTURE (анонс) и DETAIL_PICTURE (детальная). Дополнительные фото галереи хранятся в отдельном свойстве типа «Файл» с включённым флагом «множественное» — обычно оно называется MORE_PHOTO.
Физически файлы лежат в таблице b_file и на диске в /upload/iblock/. Когда вы «меняете» картинку, Битрикс создаёт новую запись в b_file, а старую помечает на удаление. Поэтому массовая замена — это не правка одного поля, а корректная перезапись файловых объектов через API или штатные механизмы.
PREVIEW_PICTURE/DETAIL_PICTURE и своё MORE_PHOTO. Замена картинок на уровне товара не затрагивает картинки SKU — их обновляют отдельно.Способ 1: обмен с 1С по CommerceML
Если каталог выгружается из «1С:Управление торговлей» или «1С:ERP», картинки логичнее менять на стороне 1С. При выгрузке в формате CommerceML 2 изображения кладутся в подкаталог рядом с import.xml, а в самом XML на них ссылается тег <Картинка>. Битрикс при обмене (/bitrix/admin/1c_exchange.php) сопоставляет товары по XML_ID и перезаписывает файлы.
- В карточке номенклатуры 1С прикрепляете новые изображения — при следующей выгрузке они заменят старые на сайте автоматически.
- Первое фото становится основным (
DETAIL_PICTURE), остальные попадают в галереюMORE_PHOTO. - Работает и для товаров, и для SKU — при условии, что предложения тоже выгружаются из 1С.
Способ 2: импорт CSV с внешними ссылками
Штатный мастер Магазин → Настройки → Экспорт/Импорт данных → Импорт CSV умеет подтягивать картинки по URL. В файле должно быть поле-идентификатор (артикул, ID или XML_ID), по которому товар находится, и столбец со ссылкой на изображение.
- Готовите CSV: колонка ключа (например,
Артикул) и колонка видаhttps://cdn.site.ru/foto/art123.jpg. - В мастере на шаге сопоставления связываете колонку ключа с полем поиска дубликатов, а колонку ссылки — с
Детальная картинкаили свойством галереи. - Ставите режим «обновлять существующие товары» и запускаете. Битрикс скачает файлы по ссылкам и подставит их.
Способ удобен, когда фото уже лежат на CDN или файловом сервере и есть таблица соответствия «артикул → ссылка». Для галереи из нескольких фото ссылки перечисляют в одной ячейке через разделитель, заданный в настройках профиля импорта.
Способ 3: привязка фото по имени файла (артикулу)
Частый кейс: поставщик прислал папку с фотографиями, где имя файла совпадает с артикулом — art123.jpg, art123_2.jpg. Готового пункта меню «привязать по имени» в Битрикс нет, но задача решается небольшим скриптом-агентом или через профиль импорта.
Логика скрипта проста: пройти по файлам в папке, из имени вырезать артикул, найти товар методом CIBlockElement::GetList по свойству CML2_ARTICLE, затем обновить картинку через CFile::MakeFileArray() и CIBlockElement::Update. Файлы с суффиксом _2, _3 складываете в массив свойства MORE_PHOTO.
| Имя файла | Артикул | Куда |
|---|---|---|
| art123.jpg | art123 | DETAIL_PICTURE |
| art123_2.jpg | art123 | MORE_PHOTO |
| art123_3.jpg | art123 | MORE_PHOTO |
Скрипт кладут в отдельный файл, подключают prolog_admin_before.php и запускают из-под администратора, либо оформляют как разовый агент. Так за один прогон обновляются тысячи товаров.
Способ 4: обновление через API (CFile и Update)
Самый гибкий вариант для нестандартной логики — прямая работа с API. Ключевые функции: CFile::MakeFileArray($path) формирует массив файла из пути или URL, а CIBlockElement::Update($id, $arFields) сохраняет его в поле товара.
- Для детальной картинки:
$el->Update($id, array('DETAIL_PICTURE' => CFile::MakeFileArray($url))); - Чтобы удалить старое фото и не плодить сироты в
b_file, передают подмассив с флагом'del' => 'Y'для прежнегоFILE_ID. - Множественное свойство обновляют через
CIBlockElement::SetPropertyValuesExс массивом файловых массивов.
В новом ядре (D7) для товаров и SKU удобнее работать через \Bitrix\Iblock\ElementTable и модуль catalog, но для операций с картинками старое API CFile/CIBlockElement остаётся рабочим и предсказуемым. Скрипт стоит гонять пакетами по 100–200 элементов, сбрасывая тегированный кэш командой CIBlockElement::Update (он инвалидируется автоматически).
Риски, кэш и как не потерять оригиналы
Массовая замена картинок — операция необратимая на уровне файлов, поэтому подготовка важнее самого прогона.
- Бэкап. Перед запуском снимите резервную копию БД и папки
/upload/iblock/. Если что-то пойдёт не так, откат поXML_IDвернёт исходные файлы. - Кэш. После обновления очистите кэш компонентов каталога и, при использовании ускорителей, сбросьте композит и CDN. Иначе на витрине останутся старые превью.
- Ресайзы. Битрикс генерирует уменьшенные копии на лету и кэширует их в
/upload/resize_cache/. Эту папку тоже полезно очистить, чтобы пересобрались миниатюры. - Права. Скрипты запускайте из-под пользователя с правами администратора модуля
iblock, иначеUpdateвернёт ошибку прав.
Какой способ выбрать
Ориентируйтесь на источник изображений и регулярность задачи.
| Ситуация | Способ |
|---|---|
| Каталог живёт в 1С | Обмен CommerceML |
| Есть таблица «артикул → URL» | Импорт CSV |
| Папка файлов по артикулам | Скрипт по имени файла |
| Нестандартная логика, SKU, условия | API CFile + Update |
Разовую замену на паре сотен товаров проще сделать импортом CSV. Регулярное обновление ассортимента — только через обмен с 1С, иначе правки будут затираться. Сложные случаи с галереями и торговыми предложениями почти всегда упираются в скрипт на API.
Итог
Массовая замена картинок в каталоге Битрикс сводится к четырём проверенным путям: обмен с 1С, импорт CSV по ссылкам, скрипт-привязка по имени файла и прямое обновление через CFile с CIBlockElement::Update. Выбор зависит от того, где хранятся исходники и как часто их меняют. В любом случае обязательны бэкап, сброс кэша и очистка resize_cache, а также контроль совместимости с обменом 1С, чтобы правки не затирались.
Если каталог большой, картинок много, а часть завязана на торговые предложения, ручные эксперименты рискованны. Мы в B2Bsite настраиваем корректный обмен изображениями с 1С, пишем безопасные пакетные скрипты обновления и следим, чтобы витрина отдавала свежие фото без потери скорости. Обращайтесь — соберём процесс так, чтобы обновление фото стало рутиной на пару кликов.
Частые вопросы
Можно ли поменять все фото товаров без программиста?
Да, если изображения доступны по URL или лежат в 1С. Импорт CSV и обмен CommerceML настраиваются в админке штатными мастерами. Скрипты нужны только для нестандартной логики и привязки по имени файла.
Как обновить картинки, не потеряв старые?
Перед массовой заменой сделайте резервную копию БД и папки /upload/iblock/. Тогда при ошибке можно откатить файлы по XML_ID товаров. Сама замена в Битрикс необратима на уровне b_file.
Почему после замены на сайте видны старые фото?
Скорее всего не очищен кэш компонентов, композитный кэш или папка resize_cache с миниатюрами. Сбросьте их, а при использовании CDN — сделайте инвалидацию, чтобы обновились превью.
Обмен с 1С удаляет картинки, загруженные вручную на сайте?
При полной выгрузке — да, если этих фото нет в 1С. Битрикс приводит картинки товара к тому, что пришло в CommerceML. Держите все изображения в одном источнике.
Как массово поменять фото у торговых предложений (SKU)?
Картинки SKU хранятся отдельно от товара, поэтому обновляют их по ID предложения. Через 1С это работает, если предложения выгружаются из 1С, либо пишут скрипт с поиском SKU по свойству CML2_LINK и артикулу.
Можно ли грузить картинки по ссылке из CSV?
Да, штатный импорт CSV скачивает файлы по URL и подставляет их в детальную картинку или свойство галереи. Нужны колонка-идентификатор товара и колонка со ссылкой на изображение.
Как привязать фото по имени файла к артикулу?
Готового пункта меню нет, задачу решает скрипт: он вырезает артикул из имени файла, находит товар через CIBlockElement::GetList и обновляет картинку методом CFile::MakeFileArray + Update.
Сколько товаров можно обновить за один прогон?
Технически ограничений нет, но скрипты стоит запускать пакетами по 100–200 элементов, чтобы не упереться в время выполнения и память. Так же снижается нагрузка на базу и файловую систему.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.