outl1ne/nova-media-hub

用于管理媒体内容的Laravel Nova工具。

资助包维护!
outl1ne

2.1.0 2024-09-09 10:21 UTC

README

Latest Version on Packagist Total Downloads

这个Laravel Nova包允许您管理媒体和媒体字段。

要求

  • php: >=8.0
  • laravel/nova: ^4.0

功能

  • 独立的视图中的媒体中心UI
  • 用于选择单个/多个媒体的媒体中心字段
  • 图像优化和多格式转换支持
  • 文件命名和路径定制
  • 暗黑模式支持
  • 许多配置选项

屏幕截图

Media Hub

Choose media

安装

通过Composer在Laravel Nova项目中安装包并运行迁移

# Install nova-media-hub
composer require outl1ne/nova-media-hub

# Run migrations
php artisan migrate

在Nova的tools()方法中注册该工具

// in app/Providers/NovaServiceProvider.php

public function tools()
{
    return [
        // ...
        \Outl1ne\NovaMediaHub\MediaHub::make()
        // You can choose to hide the Tool from the sidebar
          ->hideFromMenu()

          // Optionally add additional fields to Media items
          ->withCustomFields(
            ['copyright' => __('Copyright')],
            overwrite: false
          )
    ];
}

使用方法

字段

此包提供了一个名为MediaHubField的字段,允许您选择媒体。该字段将媒体以JSON数组的形式存储到数据库中。

示例用法

use Outl1ne\NovaMediaHub\Nova\Fields\MediaHubField;

// ...

MediaHubField::make('Media', 'media')
  ->defaultCollection('products') // Define the default collection the "Choose media" modal shows
  ->multiple(), // Define whether multiple media can be selected

类型转换

模型中的媒体列可以自动转换为媒体模型集合

class Product extends Model
{
    protected $casts = [
        'media' => \Outl1ne\NovaMediaHub\Casts\MediaCast::class,
    ];
}
    $cover = Product::first()->media->first();

    // ...

    $urls = Product::first()->media->pluck('url');

    // ...

    $collection = Product::first()->media->where('collection_name', 'Details');

配置

可以使用以下命令发布配置文件

php artisan vendor:publish --provider="Outl1ne\NovaMediaHub\MediaHubServiceProvider" --tag="config"

自定义优化链

您可以定义一个自定义优化链或向其中添加项目,如下所示

// in app/Providers/AppServiceProvided.php

public function register() {
  // ...

  // https://github.com/spatie/image-optimizer#creating-your-own-optimization-chains
  \Outl1ne\NovaMediaHub\MediaHub::withOptimizerChain(
    (new OptimizerChain)
      ->addOptimizer(new Jpegoptim([
        '--strip-all',
        '--all-progressive',
      ]))
      ->addOptimizer(new Pngquant([
        '--force',
      ]))
  );
}

本地化

可以使用以下命令发布翻译文件

php artisan vendor:publish --provider="Outl1ne\NovaMediaHub\MediaHubServiceProvider" --tag="translations"

鸣谢

许可证

Nova Media Hub是开源软件,根据MIT许可证授权。