codicastudio / media-library-manager
一个随机的 Codica Studio 包。
Requires
- php: ^7.4 || ^8.0
- codicastudio/media-library: ^1.0
This package is auto-updated.
Last update: 2024-09-25 13:39:23 UTC
README
目录
安装
composer require ebess/advanced-nova-media-library
php artisan vendor:publish --tag=nova-media-library
媒体配置模型
假设您已将模型配置为如下使用媒体库
use Spatie\MediaLibrary\Models\Media; public function registerMediaConversions(Media $media = null) { $this->addMediaConversion('thumb') ->width(130) ->height(130); } public function registerMediaCollections() { $this->addMediaCollection('main')->singleFile(); $this->addMediaCollection('my_multi_collection'); }
通用文件管理
为了能够上传和处理通用文件,请使用 Files
字段。
use Ebess\AdvancedNovaMediaLibrary\Fields\Files; Files::make('Single file', 'one_file'), Files::make('Multiple files', 'multiple_files'),
单个图像上传
use Ebess\AdvancedNovaMediaLibrary\Fields\Images; public function fields(Request $request) { return [ Images::make('Main image', 'main') // second parameter is the media collection name ->conversionOnIndexView('thumb') // conversion used to display the image ->rules('required'), // validation rules ]; }
多图像上传
如果您启用了多文件上传功能,您可以通过 拖放 来 排序 图像。
use Ebess\AdvancedNovaMediaLibrary\Fields\Images; public function fields(Request $request) { return [ Images::make('Images', 'my_multi_collection') // second parameter is the media collection name ->conversionOnPreview('medium-size') // conversion used to display the "original" image ->conversionOnDetailView('thumb') // conversion used on the model's view ->conversionOnIndexView('thumb') // conversion used to display the image on the model's index page ->conversionOnForm('thumb') // conversion used to display the image on the model's form ->fullSize() // full size column ->rules('required', 'size:3') // validation rules for the collection of images // validation rules for the collection of images ->singleImageRules('dimensions:min_width=100'), ]; }
选择现有媒体
如果您要将相同的媒体文件上传到多个模型,且不希望再次从文件系统中选择,请使用此功能。选择已存在的媒体将 复制 它。
注意:此功能将向您的应用程序的每个用户公开一个端点以搜索现有媒体。如果您的媒体上传或媒体模型上的自定义属性是机密的,请不要启用此功能!
- 如果您尚未发布配置文件,请发布它们
artisan vendor:publish --tag=nova-media-library
- 在配置文件 config/nova-media-library 中启用此功能
return [ 'enable-existing-media' => true, ];
- 启用选择现有媒体字段
Images::make('Image')->enableExistingMedia(),
上传图像的名称
新上传文件的默认文件名是原始文件名。您可以使用 setFileName
函数来更改它,该函数接受一个回调函数作为唯一参数。此回调函数有三个参数:$originalFilename
(原始文件名,如 Fotolia 4711.jpg
)、$extension
(文件扩展名,如 jpg
)、$model
(当前模型)。以下是一些示例:
// Set the filename to the MD5 Hash of original filename Images::make('Image 1', 'img1') ->setFileName(function($originalFilename, $extension, $model){ return md5($originalFilename) . '.' . $extension; }); // Set the filename to the model name Images::make('Image 2', 'img2') ->setFileName(function($originalFilename, $extension, $model){ return str_slug($model->name) . '.' . $extension; });
默认情况下,Media 对象上的 "name" 字段设置为没有扩展名的原始文件名。要更改此设置,请使用 setName
函数。与上面的 setFileName
类似,它接受一个回调函数作为唯一参数。此回调函数有两个参数:$originalFilename
和 $model
。
Images::make('Image 1', 'img1') ->setName(function($originalFilename, $model){ return md5($originalFilename); });
响应式图像
如果您想使用来自 Spatie MediaLibrary 的响应式图像功能,您可以在模型上使用 withResponsiveImages()
函数。
Images::make('Image 1', 'img1') ->withResponsiveImages();
图像裁剪
默认情况下,您可以通过点击编辑视图左下角的剪刀来裁剪/旋转图像。此功能使用 vue-js-clipper 实现。裁剪功能仅限于 image/jpg
、image/jpeg
和 image/png
的 MIME 类型。
重要:通过裁剪现有图像,原始媒体模型将被删除并替换为裁剪后的图像。所有自定义属性将从旧模型复制到新模型。
要禁用此功能,请使用 croppable
方法
Images::make('Gallery')->croppable(false);
您可以设置所有配置,例如比例,如下所示
Images::make('Gallery')->croppingConfigs(['ratio' => 4/3]);
可用的裁剪配置,请参阅 https://github.com/timtnleeProject/vuejs-clipper#clipper-basic。
自定义属性
Images::make('Gallery') ->customPropertiesFields([ Boolean::make('Active'), Markdown::make('Description'), ]); Files::make('Multiple files', 'multiple_files') ->customPropertiesFields([ Boolean::make('Active'), Markdown::make('Description'), ]); // custom properties without user input Files::make('Multiple files', 'multiple_files') ->customProperties([ 'foo' => auth()->user()->foo, 'bar' => $api->getNeededData(), ]);
显示图像统计信息(大小、尺寸、类型)
Images::make('Gallery') ->showStatistics();
自定义头信息
Images::make('Gallery') ->customHeaders([ 'header-name' => 'header-value', ]);
媒体字段(视频)
为了处理带有缩略图的视频,您需要使用 Media
字段而不是 Images
字段。这样您就可以上传视频了。
use Ebess\AdvancedNovaMediaLibrary\Fields\Media; class Category extends Resource { public function fields(Request $request) { Media::make('Gallery') // media handles videos ->conversionOnIndexView('thumb') ->singleMediaRules('max:5000'); // max 5000kb } } // .. class YourModel extends Model implements HasMedia { public function registerMediaConversions(Media $media = null) { $this->addMediaConversion('thumb') ->width(368) ->height(232) ->extractVideoFrameAtSecond(1); } }