Новый шаблон sale.order.ajax: кастомизация

Изображение
На реализацию этого функционала ушло порядка 30 часов рабочего времени (плюс время на самообразование). За это время было отправлено 18 коммитов, написано 371 строк кода и осуществлено несколько попыток виртуального суицида :) Основная задача Создать группу свойств "Параметры доставки", которая будет зависеть от выбора типа доставки. Для курьера это "Адрес доставки", для "Транспортной компании" это выбор ТК из выпадающего списка, для доставки "Другая транспортная компания" - тоже текстовое поле (как и адрес доставки). Все эти поля являются обязательными, и отображаться должны не в блоке "Пользователь", а в блоке с доставками. В новом шаблоне sale.order.ajax перенести поля в другой блок не так просто, как кажется на первый взгляд, а информации на эту тему буквально крупицы.

Автоматическое создание галереи из медиабиблиотеки в инфоблоках

Бывает такое, что сайт у клиента организован насколько странно. Например, фотогалерея лежит в инфоблоках, и отображается компонентом 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");?>

Вуаля!

Комментарии

Популярные сообщения из этого блога

Вывод пользовательского свойства раздела в компонентах catalog.section и news.list

Новый шаблон sale.order.ajax: кастомизация

Если при полной выгрузке из 1С в битрикс товары и разделы приходят неактивными