Компонент: Медиа библиотека

Материал из Smart Core Wiki

Перейти к: навигация, поиск

Компонент служит для централизованного управления файлами (картинки, видео, аудио, флеш и т.д.)

Содержание

Описание

Наиболее гибким решением видится применение "плагинов", с ходу приходят в голову сделующие:

При загрузке картинки, она будет обработана заданными "плагинами" и сохранена на диск, на этом этапе можно сразу ресайзить до адекватного для веба размеров в целях экономии места на диске.

При обычном запросе картинки или файла будет возвращаться ссылка на оригинал (если не указана опция "хранить оригинал").

При запросе с указанием плагина или цепочки плагинов, система проверит существует ли такой файл в базе, если нет, то создаст такой файл на базе оригианала следуя заданной цепочке плагинов и вернёт ссылку на него.

Коллекции

Все файлы в системе находятся в "коллекциях", это позволяет управлять группами файлов применяя разные политики, например формирование путей, имен файлов, хранилищами и применением над файлами обработчиков.

Внутри каждой коллекции файлы можно будет распределить по категориям и пометить тегами (возможно этот функционал можно будет вынести в отдельные библиотеки, например "Файловый менеджер").


Обладают следующими прараметрами:


Например конфигурация плагинов:

store_original:

Плагины

Resize

Производит изменение размеров изображения.

Watermark

Нанесение водяных знаков.

Crop

Обрезка изображения.

Avatar

Работа с аватарками пользователей.

Таблицы

Информация о всех файлах хранится в РСУБД.

Типы файлов

При загрузке, система будет определять тип файла по его расширению. Например:

'img' => 'jpg, jpeg, gif, png, bmp, tiff, ico',
'executable' => 'bat, bin, cmd, csh, com, exe, sh',
'doc' => 'djv, djvu, doc, docx, odt, pdf, txt, rtf',
'spreadsheet' => 'ods, xls, xslx',
'font' => 'fnt, fon, otf, ttf',
'audio' => 'ape, flac, mp3, mid, ogg, wma, wav',
'video' => '3gp, avi, flv, mpg, mpe, mpeg, mpeg4, mp4, mov, mkv, ogv, rm, qt, qtm',
'archive' => '7z, bzip, bz2, bzip2, gz, gzip, rar, tar, tgz, tz, xz, zip',
'web' => 'css, js, json, jsp, htaccess, html, htm, php, php5, rss, tpl, url, web, xss, xht, xhtm, xhtml',
'settings' => 'cfg, ini, inf, isp, opt, opts, set, settings',

Примеры использования

$mediaLib = new MediaLib();
$mc = $mediaLib->getCollection($collection_id);
// или 
$mc = new MediaCollection($collection_id);
 
// получить ссылку на файл.
$filepath = $mc->get($file_id);
 
// получить ссылку на ресайзнутую картинку.
$filepath = $mc->get($file_id, array(
    'resize' => array(
        'width' => 100,
        'height' => 100,
    ),
));
 
/**
 * Добавление файла.
 * 
 * @param array $file - $_FILE[key]
 * @return int|false - ID новой картинки или false.
 */
$file_id = $mc->upload($file);

При запросе ссылки на файл, URI будет формироваться следующим образом:

$file_uri = $storage_path . $collection_path . $file_relative_path . $file_name;

Получение ссылки из шаблона:

{{ medialib(123, {'width: 100, 'height': 100}) }}
 
{{ medialib(123, 'my_thumb') }}

@todo

и мысли всякие ;)

  1. Подумать как лучше разграничивать коллекции файлов для разных юзеров.
  2. На сколько актуально мультисайтовость?
  3. Сделать возможность хранить миниатюры на других хранилищах.
  4. Автоповорот на основе EXIF данных.
  5. Возможно есть смысл сделать TTL для ресайзов.
  6. Массовое удаление ресайзов. Например если больше какой-то ресайз ненужен.
  7. Может быть есть смысл создать таблицу ресайзов? Тогда проще будет управлять хранилищами.
  8. Продумать логику обрезки картинок, особенно интересна логика как в вк т.е. оригинал остаётся, юзер указывает блась и система переделывает все кропы.
  9. Предусмотреть возможность загрузки оригинальных картинок в закрытое хранилище, а в паблик отдавать только обработанные версии.
Личные инструменты
Пространства имён
Варианты
Действия
Основные разделы
Ссылки
Навигация
Инструменты