Взаимодействие инфоблоков с подгружаемыми файлами смахивает на тот нипель. Загрузить иллюстрацию удобно, легко, быстро, и отображение сразу в нужных местах сайта. А выгрузить ее назад, на компьютер? А если их не одна, а 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');
Назад в раздел