classic-o/nova-media-library

工具和字段,可让您管理文件并将它们添加到帖子中

1.0.8 2021-10-23 17:47 UTC

README

为Laravel Nova提供的工具和字段,可让您管理文件并将它们添加到帖子中。

目录

功能

  • 存储和管理您的媒体文件
  • 使用单文件字段
  • 使用文件数组字段
  • 通过URL/路径上传文件
  • 将媒体字段与Trix编辑器集成
  • 实现字段的自定义JS回调
  • 通过宽度/高度在后台自动调整图片大小
  • 在前端裁剪图片
  • 创建图片大小变体的能力
  • 在单个文件夹中组织文件,按日期或可管理的文件夹分开
  • 控制文件可见性的能力

从0.x迁移到1.x

在版本1.x中,配置文件和数据库迁移已更改。
升级到版本1.x后,您需要从数据库中删除旧表,然后重新安装和重新配置这些文件。

要求

安装

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(),

默认情况下,此文件将自动显示,如工具中所示,为 gallerylist
您可以在第一个参数中设置所需显示类型

MediaLibrary::make('Documents')
            ->array('list'),

当您使用数组时,请将模型中所需列的casts设置为array,并将数据库中的类型设置为 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获取文件

在您的模型中只存储文件(夹)的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

屏幕截图

Media Library

Media Library

Details

Crop Image

Index Field

Form Field

Record