landings_file_collection
Специальная коллекция для хранения произвольных файлов для скачивания. Умеет:
- Организовывать массовую AJAX-загрузку файлов;
- Выдавать ссылки на скачивание файлов.
Разберем эти возможности по порядку:
AJAX-загрузка файлов
Для того, чтобы сделать загрузку файлов максимально простой, мы сделали jQuery плагин и серверную инфраструктуру для приема изображений на базе коллекции.
Чтобы сделать красивую и удобную загрузку файлов, нам понадобится пользовательская и серверная части. Начнем с пользовательской.
<script type="text/javascript" src="{$wa_app_static_url}js/load-image.min.js"></script> <script type="text/javascript" src="{$wa_url}wa-content/js/jquery-plugins/fileupload/jquery.iframe-transport.js"></script> <script type="text/javascript" src="{$wa_url}wa-content/js/jquery-plugins/fileupload/jquery.fileupload.js"></script> <script type="text/javascript" src="{$wa_app_static_url}js/gofileupload.js"></script> <h2 class="l-tab-caption l-block mt20"> Файлы </h2> <form id="files_file_upload" action="?module=block&action=exec&block_id={$block.id|escape}&func=uploadFiles" method="POST" enctype="multipart/form-data"> <div class="l-dropbox"> <a class="l-fileinput-button"> <i class="icon16 upload"></i> Выберите файлы <input type="file" name="files[]" multiple=""> </a> <span class="gray">или просто перетащите их сюда, чтобы начать загрузку</span> </div> {$wa->csrf()} <div class="dialog width500px height400px" id="l_upload_notification"> <div class="dialog-background"></div> <div class="dialog-window"> <div class="l-upload-list"></div> <div class="dialog-buttons"> <div class="block float-right" style="padding-top: 22px;"> <a href="#" class="l-cancel hint cancel">Отмена</a> </div> <div style="display:none; padding-top: 25px;" class="l-upload-errors block errormsg"> Некоторые файлы загружены с ошибками </div> </div> </div> </div> </form> <script type="text/javascript"> $(document).ready(function() { $('#files_file_upload').goFileUpload(function(jData) { var id = jData.file_id; }); }); </script>
Обратите внимание на атрибут action формы. Как и откуда он берется, Вы можете прочитать в статье "Настройки блока".
Теперь серверная часть:
public function uploadImages() { // Инициализация коллекции $file_collection_id = ifempty($this->settings['file_collection_id'], 0); if(!$file_collection_id) { file_collection = new landingsFileCollection(null, $this->id); $this->settings['file_collection_id'] = $file_collection->getId(); $this->saveSettings(); } else {$file_collection = new landingsFileCollection($file_collection_id);} // Самая мякотка. Для загрузки нужно всего лишь вызвать этот метод коллекции return $file_collection->uploadFromPost('files'); // files - имя параметра с файлами в запросе }
Ссылки для скачивания файлов
Чтобы получить всю необходимую информацию для скачивания файла, вызовите метод:
landingsFileCollection::getDownloadData($file_id) // file_id - идентификатор файла (позиции)