+7 495 008 8452
  • Загрузка
Выберите ваш цвет

Как скачать картинки из иноблока «Битрикс» с сохранением структуры?

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

Взаимодействие инфоблоков с подгружаемыми файлами смахивает на тот нипель. Загрузить иллюстрацию удобно, легко, быстро, и отображение сразу в нужных местах сайта. А выгрузить ее назад, на компьютер? А если их не одна, а 20, 100? А если все изображения раздела, которые CMS при загрузке сам куда-то распихал по временным папкам? Собирать вручную? Зачем же, можно автоматизировать.

Вот вам код скрипта. Кириллические папки и файлы поддерживает.

<?php require($_SERVER['DOCUMENT_ROOT'].'/bitrix/header.php');

$BID = 6;
$destDir = $_SERVER['DOCUMENT_ROOT'].'/export/';
$arPartDir = array();

function MakeFolder($arSect, $path, $BID) {
	static $io = false;
	if ($io === false) {
		$io = CBXVirtualIo::GetInstance();
	}
	$path .= $arSect['NAME'].'/';
	$rsElem = CIBlockElement::GetList(array(), array('IBLOCK_ID' => $BID, 'SECTION_ID' => $arSect['ID']));
	while ($arElem = $rsElem->Fetch()) {
		if ($arElem['DETAIL_PICTURE'] > 0) {
			$arPicture = CFile::GetFileArray($arElem['DETAIL_PICTURE']);
			$inIO = $io->GetFile($io->RelativeToAbsolutePath($arPicture['SRC']));
			$outIO = $io->GetFile($path.$arPicture['ORIGINAL_NAME']);
			if (!$outIO->IsExists()) {
				$content = $inIO->GetContents();
				if ($content !== null) {
					$outIO->PutContents($content);
				}
			}
		}
	}
	$io->CreateDirectory($path);
	if (isset($arSect['CHILD'])) {
		foreach ($arSect['CHILD'] as $arChild) {
			MakeFolder($arChild, $path, $BID);
		}
	}
}

if (CheckDirPath($destDir) && CModule::IncludeModule('iblock')) {
	$arSects = array();
	$rsSect = CIBlockSection::GetList(array('LEFT_MARGIN' => 'ASC'), array('IBLOCK_ID' => $BID));
	while ($arSect = $rsSect->Fetch()) {
		$arSects[$arSect['ID']] = array(
			'ID' => $arSect['ID'],
			'NAME' => $arSect['NAME'],
			'IBLOCK_SECTION_ID' => $arSect['IBLOCK_SECTION_ID'],
		);
	}
	
	//соберем в дерево
	foreach ($arSects as $id => $arItem) {
		if ($arItem['IBLOCK_SECTION_ID']>0) {
			if (isset($arSects[$arItem['IBLOCK_SECTION_ID']])) {
				if (!isset($arSects[$arItem['IBLOCK_SECTION_ID']]['CHILD'])) {
					$arSects[$arItem['IBLOCK_SECTION_ID']]['CHILD'] = array();
				}
				$arSects[$arItem['IBLOCK_SECTION_ID']]['CHILD'][$id] = $arItem;
			}
			unset($arSects[$id]);
		}
	}
	
	foreach ($arSects as $arSect) {
		MakeFolder($arSect, $destDir, $BID);
	}
	
}

require($_SERVER['DOCUMENT_ROOT'].'/bitrix/footer.php');




Назад в раздел

Подписаться на новые материалы раздела:
Загрузка...