maxim-drobonoh / nova-media-library
工具和字段,让您管理文件并将它们添加到帖子中
Requires
- php: >=7.1.0
- intervention/image: ^2.
README
Laravel Nova 的工具和字段,让您管理文件并将它们添加到帖子中。
目录
功能
- 存储和管理您的媒体文件
- 使用单文件字段
- 使用文件数组字段
- 通过 URL/路径上传文件
- 将媒体字段与 Trix 编辑器集成
- 为字段实现自定义 JS 回调
- 通过宽度/高度在后台自动调整图像大小
- 在前端裁剪图像
- 创建图像大小变体的能力
- 在单个文件夹中组织文件,按日期或可管理的文件夹分开
- 控制文件可见性的能力
从 0.x 迁移到 1.x
在版本 1.x 中,配置文件和数据库迁移已经更改。
升级到版本 1.x 后,您需要从数据库中删除旧表,然后重新安装和重新配置这些文件。
要求
- Laravel 5.8+
- Nova 2
- intervention/image 包用于图像调整大小(可选)
安装
composer require classic-o/nova-media-library
php artisan vendor:publish --provider="ClassicO\NovaMediaLibrary\ToolServiceProvider"
php artisan migrate
php artisan storage:link
配置
使用
在 app/Providers/NovaServiceProvider.php 中添加工具
public function tools()
{
return [
new \ClassicO\NovaMediaLibrary\NovaMediaLibrary()
];
}
将字段添加到资源。
use ClassicO\NovaMediaLibrary\MediaLibrary;
class Post extends Resource
{
...
public function fields(Request $request)
{
return [
...
MediaLibrary::make('Image'),
...
];
}
...
}
定制
默认情况下,此字段用作单文件。如果您需要将其用作文件数组,请添加选项
# Display
MediaLibrary::make('Gallery')
->array(),
默认情况下,这些文件将自动显示,如工具中的 gallery 或 list。
您可以在第一个参数中设置所需显示类型
MediaLibrary::make('Documents')
->array('list'),
当您使用数组时,请将模型中所需列的铸造设置为数组,并在数据库中将类型设置为 nullable TEXT
对于单文件 - nullable INT
如果您想隐藏在手风琴下的文件,请添加以下选项
MediaLibrary::make('Gallery')
->array()
->hidden()
您可以通过类型(配置文件中类型的标签)限制文件的选择
MediaLibrary::make('File')
->types(['Audio', 'Video'])
要设置字段中图像的预览大小,请添加以下选项(裁剪附加图像变体的标签)
默认情况下,预览大小在配置文件中设置。
MediaLibrary::make('File')
->preview('thumb')
您还可以将媒体字段与 Trix 编辑器集成。您需要在 trix 选项中设置一个唯一名称,并在 Trix 字段中添加一个具有相同名称的附加属性
MediaLibrary::make('For Trix')
->trix('unique_trix_name'),
Trix::make('Content')
->withMeta([ 'extraAttributes' => [ 'nml-trix' => 'unique_trix_name' ] ])
要为媒体字段设置自定义回调,请使用 jsCallback 方法。
- 第一个参数设置为 JS 函数回调的名称。
- 第二个(可选)是高级选项数组
MediaLibrary::make('JS Callback')
->jsCallback('callbackName', [ 'example' => 'Nova' ]),
您的 JavaScript 回调应具有 2 个参数。第一个将是文件数组,第二个是您的选项。
window.callbackName = function (array, options) {
console.log(array, options);
}
当您在一个资源上两次或更多次使用 JS 回调或 Trix 选项时,请将 make 方法的第二个参数设置为任何唯一名称
MediaLibrary::make('JS Callback', 'js_cb_name_1')
->jsCallback('callbackName', [ 'example' => 'Nova' ]),
MediaLibrary::make('Trix Field', 'trix_name_1')
->trix('unique_trix_name'),
通过 URL 或路径上传
您还可以通过 URL 或路径程序化地将文件添加到媒体库。
use \ClassicO\NovaMediaLibrary\API;
$result = API::upload('https://pay.google.com/about/static/images/social/og_image.jpg');
如果上传成功,函数将返回模型实例。
如果在加载时发生错误,函数将抛出异常。
异常 (code => text)
0 - 由于未知原因文件未下载
1 - 禁止的文件格式
2 - 文件大小超出限制
通过 ID 获取文件
在您的模型中只存储文件(s)的id。要获取文件,请使用API类方法。
$files = API::getFiles($ids, $imgSize = null, $object = false);
# First parameter - id or array of ids
# Second - if you want to get images by size variation, write label of size
# Third - by default function return array of urls. If you want to get full data of files - set true (returns object / array of objects)
私有文件
当您使用本地存储或s3(具有私有可见性)时,您无法通过URL获取文件。
要获取文件,您需要创建一个名为nml-private-file的GET路由,包含参数id和可选的img_size。在控制器中添加用户访问验证。
如果允许访问,您可以通过API方法获取文件。
... Verifying access
$file = API::getFiles($id, null, true);
return API::getPrivateFile($file->path, request('img_size'))
本地化
要将此工具翻译成其他语言,您需要通过添加来自en.json中的短语来添加翻译文件/resources/lang/vendor/nova-media-library/{lang}.json。






