Раз пошла такая пьянка…
в новом импорте есть такая функция, которая отвечает за импорт изображений - обрабатывает входящий массив, полученный из строки с разделителем, и вызывает функцию ядра для создания изображаний.
/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;
}
здесь произойдет переход на следующую итерацию цикла, и все остальные изображения будут только дополнительными.