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 - идентификатор файла (позиции)