vis/image_storage_l5

L5 图像存储

1.4.11 2018-01-17 19:13 UTC

README

用于Laravel 5.4的包,用于处理图像、视频和文档。

部分

  1. 安装
  2. VIS-CMS
  3. 配置配置文件
    1. 图像配置
    2. 文档配置
    3. 视频配置
  4. 规范和示例
    1. 通用规范
    2. 使用图像
    3. 使用相册
    4. 使用文档
    5. 使用视频
    6. 使用视频相册
    7. 使用标签
  5. 缓存
  6. 在VIS CMS中管理的特点
    1. 通用管理
    2. 图像、视频和文档的通用管理
      1. 图像管理
      2. 视频管理
      3. 文档管理
    3. 相册和视频相册的通用管理

安装

执行

    composer require "vis/image_storage_l5":"1.*"

在 config\app.php 的 providers 数组中添加

    Vis\ImageStorage\ImageStorageServiceProvider::class,

执行表迁移

   php artisan migrate --path=vendor/vis/image_storage_l5/src/Migrations

发布 config、js、css、images

    php artisan vendor:publish --provider="Vis\ImageStorage\ImageStorageServiceProvider" --force

VIS-CMS

在 config/builder/admin.php 的 menu 数组中添加配置

    array(
      'title' => 'Медиахранилище',
      'icon'  => 'picture-o',
      'check' => function() {
          return Sentinel::hasAccess('admin.image_storage.view');
      },
      'submenu' => array(
          array(
              'title' => "Изображения",
              'link'  => '/image_storage/images',
              'check' => function() {
                  return Sentinel::hasAccess('admin.image_storage.view');
              }
          ),
          array(
              'title' => "Галереи",
              'link'  => '/image_storage/galleries',
              'check' => function() {
                  return Sentinel::hasAccess('admin.image_storage.view');
              }
          ),
          array(
              'title' => "Видео",
              'link'  => '/image_storage/videos',
              'check' => function() {
                  return Sentinel::hasAccess('admin.image_storage.view');
              }
          ),
          array(
              'title' => "Видеогалереи",
              'link'  => '/image_storage/video_galleries',
              'check' => function() {
                  return Sentinel::hasAccess('admin.image_storage.view');
              }
          ),
          array(
              'title' => "Документы",
              'link'  => '/image_storage/documents',
              'check' => function() {
                  return Sentinel::hasAccess('admin.image_storage.view');
              }
          ),
          array(
              'title' => "Теги",
              'link'  => '/image_storage/tags',
              'check' => function() {
                  return Sentinel::hasAccess('admin.image_storage.view');
              }
          ),
      )
    ),

在 config/builder/tb-definitions/groups.php 中添加权限访问并添加到组

    'Медиахранилище' => array(
        'admin.image_storage.view'   => 'Просмотр',
        'admin.image_storage.create' => 'Создание',
        'admin.image_storage.update' => 'Редактирование',
        'admin.image_storage.delete' => 'Удаление',
    ),

配置配置文件

所有配置包含3个主要设置

title 设置,指明在 VIS-CMS 中显示的分区名称

    'title' => "Галереи",

per_page 设置,指明在 VIS-CMS 页面上显示的记录数量

    'per_page' => 20,

fields 设置,包含在编辑记录表单中显示的字段集合
值:text、textarea、checkbox、select、datetime。定义与 VIS-CMS 相同。
支持动态创建新字段和标签页

    'fields' => array(
        ...
    ),

图像配置

上传图像的验证设置。错误自动填充 'max_size' 和 'extension_list' 值

    'size_validation' => array(
        'enabled' => true,
        'max_size' => '1500000',
        'error_message' => "Превышен максимальный размер изображения в [size] MB"
    ),
    'extension_validation' => array(
        'enabled' => true,
        'allowed_extensions' => array('png', 'jpg', 'jpeg'),
        'error_message' => "Допустимы только изображения форматов: [extension_list]"
    ),

JPG 图像上传质量设置。值:0-100

    'quality' => 85,

使用 Vis.Builder\OptimizationImg 类优化上传图像的设置。
值:true\false

    'optimization' => true,

使用图像的原名称作为 title 字段的设置。
值:true\false

    'source_title' => true,

在数据库中存储图像元数据的设置。
使用 exif_read_data 函数,数据以 json 格式存储。
值:true\false

    'store_exif' => true,

在删除图像实体时删除图像文件的设置。
值:true\false

    'delete_files' => true,

在重命名图像实体时重命名图像文件的设置。
值:true\false

    'rename_files' => true,

显示生成新尺寸按钮的设置。
在需要为现有记录生成新尺寸时应用。
值:true\false

    'display_generate_new_size_button' => true,

生成图像尺寸的设置。
允许在上传图像时自动生成其他尺寸的图像。
使用 Intervention 包处理图像。
使用 Modify 设置修改图像,接受 Intervention 参数

    'sizes' => array(
        'source' => array(
            'caption' => 'Оригинал',
            'default_tab' => true,
        ),
        'cms_preview' => array(
            'caption' => 'Превью в ЦМС',
            'default_tab' => false,
            'modify' => array(
                'fit' => array(160, 160, function (\Intervention\Image\Constraint $constraint) {
                    $constraint->upsize();
                }),
            ),
        ),

文档配置

所有设置参数与图像类似,除了
允许在单个 "文档" 实体下存储多个文件的设置。
当需要在不同语言下显示不同文件时可以使用。
在加载文档时为所有尺寸设置原始文件的链接,之后可以替换。

    'sizes' => array(
        'source' => array(
            'caption' => 'Основной файл',
            'default_tab' => true,
        ),
        'ua' => array(
            'caption' => 'Файл на укр',
            'default_tab' => false,
        ),
        'en' => array(
            'caption' => 'Файл на англ',
            'default_tab' => false,
        ),

    ),

视频配置

在 fields 数组中,两个必填字段负责服务和视频标识符。

    'api_provider' => array(
        'caption' => 'Видео сервис',
        'type' => 'select',
        'options' => config('image-storage.video_api.provider_names')
    ),
    'api_id' => array(
        'caption' => 'Идентификатор видео',
        'type' => 'text',
        'field' => 'string',
        'placeholder' => 'Идентификатор видео',
    ),

视频API配置

控制发送到需要密钥的视频API的请求的设置。
值:true\false

    'enabled' => true,

设置视频API响应的缓存时间。
值:x、0(注:0-永远)、false

    'cache_minutes' => 60,

自动填充 title & description 字段从视频API响应的设置。
值:true\false

    'set_data' => true,

设置提供视频API的供应商的名称。
在创建/编辑视频时显示在 select 中。

    'provider_names' => array(
        'youtube' => 'Youtube',
        'vimeo'   => 'Vimeo',
    ),

设置提供视频API的供应商

    'providers' => array(
        'youtube' => array(
         ...
        ),
        'vimeo' => array(
        ...
        ),
     )

每个视频API供应商的设置

设置在服务上检查视频的存在(不需要API密钥)

    'video_existence_url' => '',

在服务上设置图像预览链接(不需要API密钥)

    'preview_url' => '',

在服务上设置图像预览质量

    'preview_quality' => '',

在服务上设置视频观看链接(不需要API密钥)

    'watch_url' => '',

在服务上设置嵌入视频链接(不需要API密钥)

    'embed_url' => '',

在服务上设置API链接

    'api_url' => '',

在服务上设置将请求的API数据

    'api_part' => '',

在服务上设置连接到API的密钥

    'api_key' => '',

规范和示例

通用规范

为了连接到所需的服务,需要在您的类中定义其调用。

    use Vis\ImageStorage\Gallery;
    use Vis\ImageStorage\Image;
    use Vis\ImageStorage\Tag;
    use Vis\ImageStorage\VideoGallery;
    use Vis\ImageStorage\Video;
    use Vis\ImageStorage\Documents;

所有模型都可以应用标准请求原则,因为它们继承自Eloquent模型。
所有模型也使用特性VIS CMS \Vis\Builder\Helpers\Traits\TranslateTrait和\Vis\Builder\Helpers\Traits\SeoTrait

为所有记录生成唯一的slug,其值可以通过以下方法获取

    public function getSlug()

所有模型的通用scope过滤器(\Models\Traits\FilterableTrait.php)
按id排序的过滤器

    public function scopeOrderId(Builder $query, $order = "desc")

只输出活动的记录的过滤器

    public function scopeActive(Builder $query)

根据活动数组输出记录的过滤器
值:数组$activity[0,1]

   public function scopeFilterByActivity(Builder $query, array $activity = [])

按slug过滤记录

    public function scopeSlug(Builder $query, $slug = '')

按标题过滤记录

    public function scopeFilterByTitle(Builder $query, $title = '')

按创建日期过滤记录
值:数组$date['from' => '', to => '']

    public function scopeFilterByDate(Builder $query, array $date = [])

按相关标签过滤
值:数组$tags[$idTags]

    public function scopeFilterByTags(Builder $query, array $tags = [])

Eloquent与标签的关系。获取所有与实体相关的标签

    public function tags()

使用图像

Eloquent与相册的关系。获取与图像相关联的所有相册

    public function galleries()

按相册过滤图像。
值:数组$galleries[$idGalleries]

    public function scopeFilterByGalleries(Builder $query, array $galleries = [])

按命名路由获取图像链接的方法。路由需要自行定义

    public function getUrl()
    {
        return route("vis_images_show_single", [$this->getSlug()]);
    }

继承自src/Models/AbstractImageStorageFile.php的抽象以下方法
获取指定大小的图像路径
值:配置中指定的一个尺寸,默认为source

    public function getSource($size = 'source')

获取图像文件的分辨率
值:配置中指定的一个尺寸,默认为source

    public function getFileExtension($size = 'source')

获取图像文件的名称
值:配置中指定的一个尺寸,默认为source

    public function getFileName($size = 'source')

获取图像文件的大小
值:配置中指定的一个尺寸,默认为source

    public function getFileSize($size = 'source')

获取图像文件的mime-type
值:配置中指定的一个尺寸,默认为source

    public function getFileMimeType($size = 'source')

使用相册

Eloquent与图像的关系。获取与相册相关联的所有图像

    public function images()

按图像存在性过滤相册。

    public function scopeHasImages(Builder $query)

按活动图像存在性过滤相册。

    public function scopeHasActiveImages(Builder $query)

按命名路由获取相册链接的方法。路由需要自行定义

    public function getUrl()
    {
        return route("vis_galleries_show_single", [$this->getSlug()]);
    }

获取相册预览图像的方法
值:配置中指定的一个图像尺寸,默认为cms_preview

    public function getGalleryPreviewImage($size = 'cms_preview')

使用文档

继承自src/Models/AbstractImageStorageFile.php的抽象以下方法
获取指定大小的文档路径
值:配置中指定的一个尺寸,默认为source

    public function getSource($size = 'source')

获取文档文件的分辨率
值:配置中指定的一个尺寸,默认为source

    public function getFileExtension($size = 'source')

获取文档文件的名称
值:配置中指定的一个尺寸,默认为source

    public function getFileName($size = 'source')

获取文档文件的大小
值:配置中指定的一个尺寸,默认为source

    public function getFileSize($size = 'source')

获取文档文件的mime-type
值:配置中指定的一个尺寸,默认为source

    public function getFileMimeType($size = 'source')

使用视频

Eloquent与图像预览的关系。获取已安装的图像预览对象

    public function preview()

Eloquent与图像的关系。获取与相册相关联的所有图像

    public function videoGalleries()

与API提供者的关系。根据视频类型获取API提供者对象

    public function api()

按视频相册过滤视频。
值:数组$galleries[$idGalleries]

    public function scopeFilterByVideoGalleries(Builder $query, array $galleries = [])

获取视频id的方法

    public function getSource()

按命名路由获取视频链接的方法。路由需要自行定义

    public function getUrl()
    {
        return route("vis_videos_show_single", [$this->getSlug()]);
    }

获取视频预览图像链接的方法
获取或安装的图像预览,或从API请求图像。

    public function getPreviewImage($size = 'source')

使用视频API

视频API实现接口/Models/Interfaces/VideoAPIInterface.php并具有以下方法

获取视频链接的方法

    public function getWatchUrl(array $urlParams);

获取嵌入视频链接的方法

    public function getEmbedUrl(array $urlParams);

从API获取图像预览链接的方法

    public function getPreviewUrl();

从API获取所有视频数据的方法

    public function getApiResponse();

从API获取视频标题的方法

    public function getTitle();

从API获取视频描述的方法

    public function getDescription();

从API获取视频观看次数的方法

    public function getViewCount();

从API获取视频点赞次数的方法

    public function getLikeCount();

从API获取视频踩次数的方法

    public function getDislikeCount();

从API获取视频收藏次数的方法

    public function getFavoriteCount();

从API获取视频评论次数的方法

    public function getCommentCount();

使用视频相册

Eloquent与视频的关系。获取与视频相册相关联的所有视频

    public function videos()

按图像存在性过滤视频相册。

    public function scopeHasVideos(Builder $query)

按活动视频存在性过滤视频相册。

    public function scopeHasActiveVideos(Builder $query)

按命名路由获取视频相册链接的方法。路由需要自行定义

    public function getUrl()
    {
        return route("vis_video_galleries_show_single", [$this->getSlug()]);
    }

使用标签

Eloquent与图像的关系。获取与标签相关联的所有图像

    public function images()

与文档的Eloquent关系。获取所有带有标签的关联图像

    public function documents()

与视频的Eloquent关系。获取所有带有标签的关联图像

    public function videos()

与相册的Eloquent关系。获取所有带有标签的关联图像

    public function galleries()

与视频相册的Eloquent关系。获取所有带有标签的关联图像

    public function videoGalleries()

缓存

媒体库使用一系列标签来处理缓存。
在更改媒体库记录时,将自动重置与这些标签相关的现有缓存。
每个实体的标签列表

  • image-storage.video
  • image-storage.document
  • image-storage.video_gallery
  • image-storage.gallery
  • image-storage.image
  • image-storage.tag

在VIS CMS中管理的特点

通用管理

接口与VIS-CMS接口尽可能接近。
每个部分标题中都有一个包含过滤器(部分特有的)和创建新记录按钮的工具栏,点击该按钮将弹出创建模态框。
页面底部有分页功能

图像、视频和文档的通用管理

点击已添加的对象将调用编辑记录的模态框
它包含在相应配置中指定的尺寸和字段标签。可以直接管理特定图像的关系。

选择对象区域时,将显示对象多选管理面板。
选择区域后,可以通过在按住ctrl键的同时使用鼠标点击来点选添加或删除对象。

图像管理

点击“上传图像”字段将出现选择上传图像的窗口。支持图像的多重上传。
在所有图像上传并创建它们的大小后,将发送请求以优化它们。
如果生成的任何图像大小不更新,则可以在相应尺寸标签中替换它。

视频管理

创建新视频时,只需指定视频服务和视频标识符。如果视频存在,它将被添加到总列表中。
如果配置中设置了相应的设置,则title和description字段将自动填充。
如果视频服务提供的预览图像不更新,则可以在“预览”标签中上传自己的图像。

文档管理

点击“上传文档”字段将出现选择上传文档的窗口。支持文档的多重上传。
在所有文档上传到所有附加字段后,将在原始文件上设置链接。
如果需要替换任何尺寸的文件,则可以在相应尺寸标签中替换它。

相册和视频相册的通用管理

创建相册并添加图像/视频后,可以通过拖动它们来管理图像/视频的顺序。
可以通过在按住ctrl键的同时使用鼠标点击来设置图像/视频作为相册的预览。