из под ката берем его содержимое (поправить строчку номер 3!)
1. Создаем на сервере папку и по ftp заливаем файлы картинок.
2. Открываем /bitrix/admin/my_upload.php
3. Заполняем и сабмитим форму.
4. Проверяем результат.
5. Удаляем папку с файлами или только файлы.
PS При небольшом желании дорабатываем скрипт под свои нужды. поверьте это не больно
PPS Все пожелания по опциям которые должно будет поддерживать "полное" решение пишите сюда.
[spoiler]
<?
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
$ALLOWED_USER=6;
if($REQUEST_METHOD == "POST" && ($Load!="") && $USER->GetID()==$ALLOWED_USER && check_bitrix_sessid())
{
$_SESSION["uploader"]["images_dir"] = $_REQUEST["images_dir"];
$_SESSION["uploader"]["iblock_id"] = $_REQUEST["iblock_id"];
$_SESSION["uploader"]["message"] = array();
$dir = $_SERVER["DOCUMENT_ROOT"].$_SESSION["uploader"]["images_dir"];
$arImages = array();
if(is_dir($dir))
{
if ($dh = opendir($dir))
{
while(($file = readdir($dh)) !== false)
{
if($file!="." && $file!=".." && is_file($dir."/".$file))
$arImages[]=$file;
}
closedir($dh);
if(count($arImages)>0)
{
foreach($arImages as $file)
{
$arFields = Array(
"IBLOCK_ID"=>$iblock_id,
"ACTIVE" => "Y",
"NAME" => $file,
//TODO:resize "PREVIEW_PICTURE"=>CFile::MakeFileArray($dir."/".$file),
"PREVIEW_TEXT_TYPE" => "text",
"PREVIEW_TEXT" => $file,
"DETAIL_PICTURE"=>CFile::MakeFileArray($dir."/".$file),
"DETAIL_TEXT_TYPE" => "text",
"DETAIL_TEXT" => $file,
);
$obImage = new CIBlockElement;
$IMAGE_ID = intval($obImage->Add($arFields));
if($IMAGE_ID<=0)
$_SESSION["uploader"]["message"][] = "Error adding image: $f\n";
//break;
}
}
else
$_SESSION["uploader"]["message"][] = "No files found in the directory";
}
else
$_SESSION["uploader"]["message"][] = "Open directory error";
}
else
$_SESSION["uploader"]["message"][] = "Not a directory";
if(count($_SESSION["uploader"]["message"])==0)
$_SESSION["uploader"]["message"][]="All files was imported";
localredirect($APPLICATION->GetCurPageParam());
}
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");
if($USER->GetID()!=$ALLOWED_USER)
$APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));
CAdminMessage::ShowMessage(implode("<br>",$_SESSION["uploader"]["message"]));
unset($_SESSION["uploader"]["message"]);
?>
<form method="post">
<table cellborder="0" cellpadding="2" cellspacing="0">
<tr>
<td>Images dir:</td>
<td><input type="text" size="45" name="images_dir" value="<?=htmlspecialchars($_SESSION["uploader"]["images_dir"])?>"></td>
</tr>
<tr>
<td>IBlock ID:</td>
<td><input type="text" size="45" name="iblock_id" value="<?=htmlspecialchars($_SESSION["uploader"]["iblock_id"])?>"></td>
</tr>
</table>
<?echo bitrix_sessid_post();?>
<input type="submit" name="Load" value="Load!">
</form>
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");?>
|
Если человек может написать/корректно поправить такой скрипт, то ему вышеприведенное без надобности, а если не может - я бы не стал ему такое давать.
Насчет МНОГО и БЫСТРО я бы поспорил - чего только стоит двукратный вызов совершенно не легкой CFile::MakeFileArray().
Fatal error: Cannot instantiate non-existent class: ciblockelement in z:\home\alliance\www\bitrix\admin\my_upload.php on line 38
Понять не могу из-за чего эта ошибка
Добавить еще 2 строчки
Все заработало...
2. Строчку
Заменить на
PS я не проверял, но должно сработать.
<input type="text" size="45" name="images_dir" value="<?=htmlspecialchars($_SESSION["uploader"]["thumbs_dir"])?>">
Надо читать как
<input type="text" size="45" name="thumbs_dir" value="<?=htmlspecialchars($_SESSION["uploader"]["thumbs_dir"])?>">
и еще добавить строчку
$_SESSION["uploader"]["thumbs_dir"] = $_REQUEST["thumbs_dir"];
Все заработало.
И последний вопрос. Можно ли сделать так чтобы фотографии записывались не в ID инфо.блока, а в ID разделов инфо.блока?
Я только начал осваивать битрикс, и был бы рад любой помощи в этом вопросе.
Спасибо.
Я понимаю, то это уже отход от темы, но ткните, пожалуйста, какой админский класс в этом может помочь: Как прикрутить выбор папки на сервере?
<form method="post" name="form1"> ......... ....... <input type="text" id="images_dir" name="images_dir" size="30" value="<?=htmlspecialchars($_SESSION["uploader"]["images_dir"])?>"> <input type="button" value="Выбрать папку на сервере" OnClick="BtnClick()"> <? CAdminFileDialog::ShowScript ( Array( "event" => "BtnClick", "arResultDest" => array("FORM_NAME" => "form1", "FORM_ELEMENT_NAME" => "images_dir"), "arPath" => array("SITE" => SITE_ID, "PATH" =>"/upload"), "select" => 'D',// F - file only, D - folder only "operation" => 'O',// O - open, S - save "showUploadTab" => true, "showAddToMenuTab" => false, "fileFilter" => '', "allowAllFiles" => true, "SaveConfig" => true, ) ); ?> ..... ...... </form>парсить имена файлов (на случай нескольких картинок с окончаниями _1, _2 и т.д.) и потом искать элемент по артикулу?