Баг импорта изображений в новом импорте

Раз пошла такая пьянка…
в новом импорте есть такая функция, которая отвечает за импорт изображений - обрабатывает входящий массив, полученный из строки с разделителем, и вызывает функцию ядра для создания изображаний.
/app/addons/advanced_import/func.php
function fn_advanced_import_set_product_images
и в ней строки:

    if (is_string($images)) {
        $images = explode($images_delimiter, $images);
    }

    foreach ($images as $i => $image) {
        $type = $i === 0 ? 'M' : 'A';

        $image = trim($image);
        if (!$image) {
            continue;
        }

из которых получается, что если для первого (с индексом 0) элемента массива изображение физически не существует или не доступно, или элемент пуст - то у товара не будет главного изображения, только дополнительные

Варианты когда главного изображения не будет
///07601_1.jpg#{[ru]:;}///07601_2.jpg#{[ru]:;}///07601_3.jpg#{[ru]:;}
из за проверки условия if (!$image) { continue; }

7601_1.jpg#{[ru]:;}///07601_2.jpg#{[ru]:;}///07601_3.jpg#{[ru]:;}
при ошибке в наименовании и незагруженном первом изображении 7601_1.jpg

Решение - перед циклом присвоить параметру type значение М, и только после первого успешного вызова в цикле функции fn_exim_import_images присваивать параметру type значение А

2 лайка

ну или вот так было бы правильно (проверяем на существование файла (на вскидку)

    if (is_string($images)) {
        $images = explode($images_delimiter, $images);
    }
    $type = 'M';
    foreach ($images as $i => $image) {
        if (!file_exists($images_path.$image) { continue; }

 $options = array(
            'remove_images'     => $remove_images,
            'images_company_id' => $preset['company_id'],
        );
        
        fn_exim_import_images($images_path, false,  $image, $i * 10,  $type, $product_id, 'product', $options);
        $type = 'A';
    }
1 лайк

Поправите, или нет?

реальная ситуация (если вам так необходимо обоснование чтобы не смогли сказать - и так хорошо):
у меня для файла импорта заготовлен шаблон в excel, со всеми формулами итд, и для изображений формируется строка вида
07601_1.jpg#{[ru]:;}///07601_2.jpg#{[ru]:;}///07601_3.jpg#{[ru]:;} итд для загрузки до 10 изображений
сами изображения получаю от поставщиков (пронумерованных по их артикулу), переименовываю в дабл коммандере артикул_счетчик, подготавливаю в фотошопе. в процессе обработки какие-то изображения забраковываю, и ими вполне могут стать изображения со счетчиком _1
то есть при импорте получится, что первого изображения, не будет

    foreach ($images as $i => $image) {
        $type = $i === 0 ? 'M' : 'A';

        $image = trim($image);
        if (!$image) {
            continue;
        }

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