webplusm / gallery-json-media
存储在 Json 字段中的丝束媒体
v2.2.0
2024-04-25 15:15 UTC
Requires
- php: ^8.1
- filament/filament: ^3.0
- illuminate/contracts: ^10.0|^11.0
- spatie/image: ^2.2|^3.0
- spatie/laravel-package-tools: ^1.15.0
Requires (Dev)
- larastan/larastan: ^2.0.1
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.9|^8.0
- orchestra/testbench: ^8.0|^9.0
- pestphp/pest: ^2.0
- pestphp/pest-plugin-arch: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
README
此包为 Filament V3.x 添加了 json 字段媒体,用于 Laravel 前端的 fluent api 显示照片和文档的 URL 链接...
V2.x 现在使用 spatie/image 包 (^PHP 8.2 需要)
安装
您可以通过 composer 安装此包
composer require webplusm/gallery-json-media
您可以使用以下命令发布配置文件
php artisan vendor:publish --tag="gallery-json-media-config"
可选,您可以使用以下命令发布视图
php artisan vendor:publish --tag="gallery-json-media-views"
Discord
在 discord 上找到它
使用方法
准备您的模型
use GalleryJsonMedia\JsonMedia\Concerns\InteractWithMedia; use GalleryJsonMedia\JsonMedia\Contracts\HasMedia; class Page extends Model implements HasMedia { use HasFactory; use InteractWithMedia; protected $casts =[ 'images' => 'array', 'documents' => 'array', ]; // for auto-delete media thumbnails protected function getFieldsToDeleteMedia(): array { return ['images','documents']; } ... }
在 Filament Forms 中
use GalleryJsonMedia\Form\JsonMediaGallery; JsonMediaGallery::make('images') ->directory('page') ->reorderable() ->preserveFilenames() ->acceptedFileTypes() ->visibility() // only public for now - NO S3 ->maxSize(4 * 1024) ->minSize() ->maxFiles() ->minFiles() ->replaceNameByTitle() // If you want to show title (alt customProperties) against file name ->image() // only images by default , u need to choose one (images or document) ->document() // only documents (eg: pdf, doc, xls,...) ->downloadable() ->deletable() ->withCustomProperties( customPropertiesSchema: [ ... ], editCustomPropertiesOnSlideOver: true, editCustomPropertiesTitle: "Edit customs properties")
在 Filament Tables 中
use GalleryJsonMedia\Tables\Columns\JsonMediaColumn; JsonMediaColumn::make('images') ->avatars(bool|Closure)
在 Filament Infolists 中
use GalleryJsonMedia\Infolists\JsonMediaEntry; use GalleryJsonMedia\Infolists\JsonDocumentsEntry; JsonMediaEntry::make('images') ->avatars() ->thumbHeight(100) ->thumbWidth(100) ->visible(static fn(array|null $state)=> filled($state)) // or for Documents, you can download them here GalleryJsonMedia\Infolists\JsonDocumentsEntry::make('documents') ->columns(4) ->columnSpanFull()
在 Blade 前端中
<!-- for media --> @foreach($page->getMedias('images') as $media) <div style="display: flex;gap: .5rem"> {{ $media }} </div> @endforeach <!-- For documents --> <div> <ul> @foreach($page->getDocuments('documents') as $document) <li> <a href="{{ $document->getUrl() }}" target="_blank"> {{ $document->getCustomProperty('title') }} </a> </li> @endforeach </ul> </div>
您也可以通过传递一个 blade 文件到您的视图来控制整个视图以渲染媒体,如下所示
@foreach($page->getMedias('images') as $media) <div style="display: flex;gap: .5rem"> {{ $media->withImageProperties( width : 200,height: 180)->withView('page.json-media') }} </div> @endforeach <!-- the json-media.blade.php --> @php use GalleryJsonMedia\JsonMedia\Media; /** @var Media $media*/ $media @endphp <figure class="" style="width: {{ $media->width }}px"> <img class="object-cover w-full aspect-video" loading="lazy" src="{{ $media->getCropUrl(width: $media->width,height: $media->height) }}" alt="{{ $media->getCustomProperty('alt') }}" width="{{ $media->width }}" height="{{ $media->height }}" > </figure>
测试
composer test
更新日志
请参阅 CHANGELOG 了解最近更改的详细信息。
贡献
请参阅 CONTRIBUTING 了解详细信息。
安全漏洞
请参阅 我们的安全策略 了解如何报告安全漏洞。
致谢
许可证
MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件。