Бывает такое, что сайт у клиента организован насколько странно. Например, фотогалерея лежит в инфоблоках, и отображается компонентом bitrix:news.list, и поэтому каждую фоточку бедному клиенту приходится заливать по отдельности, да еще и присваивая ей значение обязательно поля "Имя".
Так что клиент в 2 часа ночи сидит и материт битрикс, будучи уверенным, насколько это неудобная CMS.
Но тут на помощь приходят они - грамотные сертифицированные специалисты)))
В данном случае я.
Чтоб не городить огород, не писать новых скриптов и не переделывать компонентов, и при этом загрузить за одну ночь 280 фоток в инфоблоки, было решено использовать медиабиблиотеку в качестве промежуточного буфера.
Клиент залил туда фотографии с помощью множественной загрузки, а я написала небольшой скрипт, который закинул все эти фоточки - каждую в свой элемент инфоблока.
Строго говоря, скрипт не идеален и можно было его еще доработать, сделав так, чтобы он сам подключился к медиабиблиотеке и выбрал определеную коллекцию, которую уже залил в ИБ.
Но так как было уже 3 часа ночи, а фотки клиенту нужны уже к утру ))) - скрипт в качестве входного параметра использует id последних загруженных в медиабиблиотеку файлов, взятые из таблицы b_files (от...до). Параметр передается через get.
Если будете использовать подобное решение, то перед загрузкой файлов в медиабиблиотеку советую включить в настройках модуля "управление структурой" галочку "сохранять имена файлов при загрузке", чтобы вы могли узнать свои файлы в таблице.
А вот и сам скрипт.
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Новая страница");
$iblock_id=14; //ID инфоблока, в который добавляем!!
CModule::IncludeModule('iblock');
$el = new CIBlockElement;
?>
<pre>
<?
/*для всех файлов с id от..до (смотреть в таблице b_files)*/
for ($idf=$_GET['from']; $idf<=$_GET['to']; $idf++)
{
$file=CFile::GetById($idf);
$arFile=$file->Fetch();
//print_r($arFile['ORIGINAL_NAME']);
$arLoadProductArray = Array(
"MODIFIED_BY" => $USER->GetID(), // элемент изменен текущим пользователем
"IBLOCK_SECTION_ID" => false, // элемент лежит в корне раздела
"IBLOCK_ID" => $iblock_id, //ID инфоблока, в который добавляем!!
"NAME" => $arFile['ORIGINAL_NAME'],
"ACTIVE" => "Y", // активен
"DETAIL_PICTURE" => CFile::MakeFileArray($idf)
);
if($PRODUCT_ID = $el->Add($arLoadProductArray))
echo "\nNew ID: ".$PRODUCT_ID;
else
echo "\nError: ".$el->LAST_ERROR;
};
?>
</pre>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>
Вуаля!
Комментарии
Отправить комментарий