Как в Битрикс ограничить изменение описания детальной картинки при выгрузке товаров из 1С?

Как можно запретить изменение поля <br/> <?=$arItem["DETAIL_PICTURE"]["DESCRIPTION"]?> при выгрузке товаров на сайт из 1С, чтобы в описании картинок использовалось только название файла?
  • 24 октября 2024 г. 16:22
Ответы на вопрос 2
В Битрикс для ограничения изменения описания детальной картинки при выгрузке товаров из 1С, вам потребуется внести изменения в процесс импорта.

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

Для этого вы можете использовать обработчик события `OnBeforeIBlockElementAdd` или `OnBeforeIBlockElementUpdate` в вашем `init.php` или в вашем модуле. Вот пример кода, который может помочь:

```php
AddEventHandler("iblock", "OnBeforeIBlockElementAdd", "SetDetailPictureDescription");
AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", "SetDetailPictureDescription");

function SetDetailPictureDescription(&$arFields) {
    if (isset($arFields["DETAIL_PICTURE"]) && is_array($arFields["DETAIL_PICTURE"])) {
        $file = CFile::GetFileArray($arFields["DETAIL_PICTURE"]["VALUE"]);
        if ($file) {
            // Устанавливаем описание как название файла
            $arFields["DETAIL_PICTURE"]["DESCRIPTION"] = $file["FILE_NAME"];
        }
    }
}
```

### Пояснения к коду:

1. **AddEventHandler**: Эта функция регистрирует ваш обработчик для событий добавления и обновления элементов инфоблока.

2. **SetDetailPictureDescription**: Ваша функция-обработчик, которая получает массив `$arFields` с данными о товаре.

3. **CFile::GetFileArray**: Используется для получения информации о загружаемом файле.

4. **$arFields["DETAIL_PICTURE"]["DESCRIPTION"]**: Если файл загружен, это поле заполняется названием файла.

### Как использовать:

1. Поместите этот код в файл `init.php` вашего сайта (обычно он находится в папке `/bitrix/php_interface/`).

2. Убедитесь, что у вас есть резервная копия сайта и БД перед внесением изменений.

После этих изменений при выгрузке товаров из 1С поле описания картинки будет заполняться автоматически именем файла, что решит вашу задачу.

### Замечания:
- Не забудьте проверить корректность работы после внесения изменений.
- Возможно, потребуется учитывать разные настройки и зависимости вашего проекта, поэтому тестируйте на тестовой версии сайта.
была тема Как настроить импорт из 1С при условии, что изображения товаров хранятся на стороне сайта? 

я решал так, в init.php

AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", "DoNotUpdate");
function DoNotUpdate(&$arFields)
{
    if ($_REQUEST['mode'] == 'import') {
        if (isset($_GET['type'], $_GET['mode']) && $_GET['type'] === 'catalog' && $_GET['mode'] === 'import') {
            unset($arFields['PREVIEW_PICTURE']);
            unset($arFields['DETAIL_PICTURE']);
        }
    }
}
Похожие вопросы