maxim-drobonoh/nova-media-library

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

1.0.4 2020-09-24 17:46 UTC

This package is not auto-updated.

Last update: 2024-09-21 11:11:23 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'),

当您使用数组时,请将模型中所需列的铸造设置为数组,并在数据库中将类型设置为 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

截图

Media Library

Media Library

Details

Crop Image

Index Field

Form Field

Record