Услуги профессионального Битрикс-программиста

Подгрузка фото к товарам из 1С


Фото в 1С не хранятся, из-за экономии места, задача обновлять с фтп, выводить товары только те, для которых есть с фото

скрипт, который обходит товары
"iNumPage"=>1 меняем на 2,3,4 и тд
//die();
//$param = "man";
$param = "woman";


if($param  == "man"){
    $iblockId = 9;
    $articlePropId = 288;
}
else{
    $iblockId = 10;
    $articlePropId = 297;
}
CModule::IncludeModule('iblock');
$arFilter = Array(
  "IBLOCK_ID"=>$iblockId
);

$arSelect = Array("ID","IBLOCK","PROPERTY_".$articlePropId,"ACTIVE");
$res = CIBlockElement::GetList(Array("id"=>"asc"), $arFilter, false, Array("nPageSize"=>10000,"iNumPage"=>1), $arSelect);

$el = new CIBlockElement; 
while($arItem = $res->Fetch()){
   $vendorCode = $arItem["PROPERTY_".$articlePropId."_VALUE"];
   $arUpd = [];
    $detailPicture = false;
    $arPhotos = [];
    if(!empty($vendorCode)){
        $article = trim($vendorCode);
        $article = explode(" ", $article);
        $article = $article[0];
        $t = $_SERVER["DOCUMENT_ROOT"]."/upload/photos/".$article;
        if (is_dir($p = $_SERVER["DOCUMENT_ROOT"]."/upload/photos/".$article)){
            if ($dir = opendir($p)){                
                while (false !== $item = readdir($dir)){               
                    if(!$detailPicture){
                        $detailPicture = CFile::MakeFileArray($p."/".$item);                       
                    }                     
                    $arPhotos[] = CFile::MakeFileArray($p."/".$item);                    
                }
                closedir($dir);
            }
        }
    }
    
    if($detailPicture){
        $arUpd["PREVIEW_PICTURE"] = $detailPicture;
        $arUpd["DETAIL_PICTURE"] = $detailPicture;    
        $arUpd["ACTIVE"] = "Y";       
        sort($arPhotos);
        CIBlockElement::SetPropertyValuesEx( $arItem['ID'], false, array("MORE_PHOTO" => $arPhotos ) );               
        
    }
    elseif($arItem["ACTIVE"]=="Y"){  
        $arUpd["ACTIVE"] = "N";                  
    }    
   
    if(!empty($arUpd)){       
        $result = $el->Update($arItem['ID'], $arUpd);                       
        if(!$result){
           echo $el->LAST_ERROR;
        }
    }   
}
обработчики, которые деактивируют товары при загрузке из 1С без фото
init.php
AddEventHandler( "iblock", "OnBeforeIBlockElementAdd", array( "nika_import", "Deactive" ));
AddEventHandler( "iblock", "OnBeforeIBlockElementUpdate", array( "nika_import", "DeactiveWithNoPhotos" ) );
class nika_import {
    function Deactive(&$arFields){//всегда деактивируем при добавлении, потому что фотки из 1С не выгружаются, будем активировать, когда фотки будем добавлять
        $arCatalogID = array(9, 10);
        if(in_array($arFields['IBLOCK_ID'], $arCatalogID) ){
            $arFields["ACTIVE"] = "N";
        }
    }
    function DeactiveWithNoPhotos(&$arFields){//деактивируем, если нет фоток
       $arCatalogID = array(9, 10);
        if(in_array($arFields['IBLOCK_ID'], $arCatalogID) ){
            
            if(empty($arFields["DETAIL_PICTURE"])){
                $arSelect = Array("ID");
                $arFilter = Array(
                    "IBLOCK_ID"=>$arFields['IBLOCK_ID'], 
                    "ID"=>$arFields['ID'],
                    "DETAIL_PICTURE" => false
                );
                $result = CIBlockElement::GetList(Array(), $arFilter, false, array(), $arSelect);
                if($arElement = $result->GetNext()){
                    $arFields["ACTIVE"] = "N";
                }
            }
        } 
    }
}