1С-Битрикс — пакетное добавление / обновление картинок из директории

20.02.2020  05:50

Возникла задача, на сайте CMS 1С-Битрикс — пакетное добавление / обновление картинок из директории. Имена файлов - артикулы товаров. Скрипт, считывающий директорию и добавляющий картинки в поле "Детальная картинка" и множественное свойство "Доп. картинки" (код MORE_PHOTO) получился такой:

$DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];
require($DOCUMENT_ROOT."/bitrix/modules/main/include/prolog_before.php");
define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS", true);
ini_set('max_execution_time', '36000');
set_time_limit(0);
ini_set('memory_limit', '512M');
$dir = $DOCUMENT_ROOT.'/upload/pics';
$IBLOCK_ID = 1;
$c=0;
if ( !$USER->IsAdmin() ) {
    $APPLICATION->AuthForm("");
}
CModule::IncludeModule("iblock");
CModule::IncludeModule("catalog");
CModule::IncludeModule("sale");
if ($handle = opendir($dir)) {
    while (false !== ($file = readdir($handle))) { 
        if ($file != "." && $file != "..") { 
			$article = str_replace(".jpeg","",$file);
			$article = str_replace(".jpg","",$article);
			$article = str_replace(".png","",$article);
			$article = str_replace(".gif","",$article);
			for($i=1;$i<=10;$i++){
				$article = str_replace("-".$i,"",$article);
			}
if(!empty($article)){
$arFilter = Array(
   "IBLOCK_ID"=>$IBLOCK_ID,
   "=PROPERTY_CML2_ARTICLE"=>$article,
);
$res = CIBlockElement::GetList(Array("ID"=>"ASC"), $arFilter, false, false, Array("ID","NAME","IBLOCK_ID","CODE","PROPERTY_CML2_ARTICLE"));
if ($ar_fields = $res->Fetch()){
	$ID = $ar_fields["ID"];
	if(strpos($file,"-1") !== false){
		for($i=1;$i<=10;$i++){
			$ext = new SplFileInfo($dir.'/'.$file);
				$file_search = str_replace("-".$i,"",$file);
				$new_file = $dir.'/'.$article.'-'.$i.'.'.$ext->getExtension();
				if(file_exists($new_file)){
		$new_make_file = CFile::MakeFileArray($new_file);
		if (!empty($new_make_file)) {
			$arProps_upd['MORE_PHOTO'][] = $new_make_file;
			CIBlockElement::SetPropertyValuesEx($ID, $IBLOCK_ID, $arProps_upd);
		}
		}
	}
	}
		else{
			$arFields_upd["IBLOCK_ID"] = $ar_fields["IBLOCK_ID"];
			$arFields_upd["ID"] = $ar_fields["ID"];
			$arFile = CFile::MakeFileArray($dir.'/'.$file);
			$arFields_upd["DETAIL_PICTURE"] = $arFile;
			$obE = new CIBlockElement();
			if ( $obE->Update($ID, $arFields_upd) ) {
				// echo $ar_fields["ID"].' - '.$ar_fields["NAME"].' - '.'ok
'; } else echo 'err '.$ID.' - '.$ar_fields["NAME"].'
'; } unset($arProps_upd,$new_make_file,$arFile,$arFields_upd); $c++; }else{ echo 'not found '.$article.'
'; } } } } closedir($handle); } echo 'Fin: '.$c;


При каждом запуске уже добавленные фотографии затираются теми, которые в директории /upload/pics/. На примере данного скрипта можно доделать под свои задачи.
Андрей Панёвин
Здравствуйте! Я — Андрей Панёвин и занимаюсь профессиональной разработкой сайтов на платформе 1С-Битрикс (исключительно программирование). Есть вопросы по статье? Могу подсказать и помочь по скайпу (andrey.panevin.ru), WhatsApp (+7-911-091-0670) или перепиской в ВК.
1000 р./час. Часовой пояск — московский.






Помогла статья? На поездку на море (Охотское):


перейти в Блог

Ударим лайками по бездорожью, разгильдяйству и бюрократизму!


Ключевые слова (тэги): 1С-Битрикс 64  PHP 77  web-программирование 102  

Вам есть что сказать — ну я же чую.
Высказаться о наболевшем, я выслушаю-:
Имя


email (не публикуется)