yurizoom/moonshine-media-manager

Media manager for MoonShine

Maintainers

Package info

github.com/yurizoom/moonshine-media-manager

pkg:composer/yurizoom/moonshine-media-manager

Statistics

Installs: 1 643

Dependents: 1

Suggesters: 1

Stars: 10

Open Issues: 0

4.4.1 2026-05-19 16:14 UTC

This package is auto-updated.

Last update: 2026-05-19 16:15:33 UTC


README

Файловый менеджер для MoonShine.

Поддержка версий

MoonShine Пакет Документация
4.0+ 4.x Ниже ↓
4.0+ 3.x Ниже ↓
3.0+ 2.x
2.0+ 1.x

Скриншоты

Менеджер Пикер
Media Manager Media Manager Picker

Установка

composer require yurizoom/moonshine-media-manager

Настройка v4 (MoonShine 4+)

Полностью AJAX — загрузка, удаление, переименование, навигация по папкам без перезагрузки страницы.

После установки опубликуйте ассеты:

php artisan vendor:publish --tag=moonshine-media-manager-assets

Конфигурация

Добавьте в config/moonshine.php:

'media_manager' => [
    'auto_menu' => true,
    'disk' => config('filesystem.default', 'public'),
    'allowed_ext' => 'jpg,jpeg,png,gif,webp,avif,svg,pdf,doc,docx,xls,xlsx,ppt,pptx,zip,rar,txt,mp3,mp4,wav,avi,mov',
    'max_file_size' => env('MOONSHINE_MEDIA_MANAGER_MAX_FILE_SIZE', 50 * 1024 * 1024),
    'default_view' => 'table',
],

Подключение OffCanvas

В app/MoonShine/Layouts/MoonShineLayout.php:

use YuriZoom\MoonShineMediaManager\Components\MediaManagerOffCanvas;

final class MoonShineLayout extends AppLayout
{
    protected function getContentComponents(): array
    {
        return [
            ...parent::getContentComponents(),
            MediaManagerOffCanvas::make(),
        ];
    }
}

MediaManagerOffCanvas — глобальный компонент, рендерит offcanvas-панель с файловым менеджером. Именно через неё работают все picker-поля на страницах. Assets загружаются автоматически через компонент.

Добавление в меню (опционально)

Если auto_menu включён (по умолчанию), пункт появится автоматически. Для ручного размещения:

use YuriZoom\MoonShineMediaManager\Pages\MediaManagerPage;

protected function menu(): array
{
    return [
        MenuItem::make(MediaManagerPage::class),
    ];
}

Поле MediaManagerPicker

Поле для выбора файлов из менеджера прямо в форме. Работает с обычными полями, Json и Layouts.

Базовое использование:

use YuriZoom\MoonShineMediaManager\Fields\MediaManagerPicker;

// Одно изображение
MediaManagerPicker::make('Изображение', 'image')
    ->allowedTypes(['image']),

// Множественный выбор с перетаскиванием
MediaManagerPicker::make('Галерея', 'images')
    ->multiple()
    ->allowedTypes(['image']),

Фильтрация файлов — по типу или по расширению, можно комбинировать:

// По типу (из менеджера): image, video, audio, pdf, word, code, zip, txt, ppt
->allowedTypes(['image'])
->allowedTypes(['image', 'pdf'])

// По расширению (точный контроль):
->allowedExtensions(['jpg', 'png', 'webp'])
->allowedExtensions(['pdf', 'doc', 'docx', 'xls', 'xlsx'])

С Json:

use MoonShine\UI\Fields\Json;

Json::make('Мета', 'meta')
    ->fields([
        Text::make('Заголовок', 'title'),
        MediaManagerPicker::make('Изображение', 'image')
            ->allowedTypes(['image']),
        MediaManagerPicker::make('Документ', 'document')
            ->allowedExtensions(['pdf', 'doc', 'docx']),
        MediaManagerPicker::make('Файлы', 'files')
            ->multiple()
            ->allowedExtensions(['pdf', 'doc', 'docx', 'xls', 'xlsx']),
    ]),

С Layouts:

use MoonShine\Layouts\Fields\Layouts;

Layouts::make('Контент', 'content')
    ->addLayout('Блок с изображением', 'image_block', [
        Text::make('Заголовок', 'title'),
        MediaManagerPicker::make('Изображение', 'image')
            ->allowedTypes(['image']),
    ])
    ->addLayout('Файловый блок', 'files_block', [
        Text::make('Заголовок', 'title'),
        MediaManagerPicker::make('Документы', 'documents')
            ->multiple()
            ->allowedExtensions(['pdf', 'doc', 'docx', 'xls', 'xlsx']),
    ]),

Возможности v4

  • AJAX навигация — переход по папкам без перезагрузки
  • Загрузка файлов — множественная загрузка с проверкой MIME-типа, расширения и размера файла
  • Создание папок — прямо из интерфейса
  • Переименование / перемещение — через модалку с указанием нового пути
  • Удаление — с подтверждением
  • Скачивание — по клику
  • URL файла — просмотр ссылки с копированием
  • Два вида — таблица и сетка (grid)
  • Быстрый переход — ввод пути вручную
  • Picker-поле — выбор файлов из менеджера прямо в форме
  • Drag-and-drop — перетаскивание для изменения порядка в picker
  • Подсветка навигации — при переходе к файлу из picker
  • Проверка файлов — детекция несуществующих файлов (broken state)
  • Превью — клик по изображению открывает полноразмерный просмотр
  • Не-изображения — отображение иконки с расширением для PDF, DOC и т.д.
  • Layouts / Json — полная интеграция с moonshine/layouts-field и Json-полями

Конфигурация v4

Параметр По умолчанию Описание
auto_menu true Автоматически добавить в боковое меню
disk public Диск файлового хранилища (только локальный)
allowed_ext jpg,jpeg,png,gif,... Разрешённые для загрузки расширения (проверка по MIME + расширению)
max_file_size 10485760 (10 MB) Максимальный размер загружаемого файла в байтах
default_view table Вид по умолчанию: table или list

Настройка v3 (MoonShine 4)

Добавьте в config/moonshine.php:

'media_manager' => [
    'auto_menu' => true,
    'disk' => config('filesystem.default', 'public'),
    'allowed_ext' => 'jpg,jpeg,png,pdf,doc,docx,zip',
    'default_view' => 'table',
],

Для добавления в меню:

use YuriZoom\MoonShineMediaManager\Pages\MediaManagerPage;

protected function menu(): array
{
    return [
        MenuItem::make(new MediaManagerPage()),
    ];
}

Настройка v2 (MoonShine 3)

Если необходимо изменить настройки, добавьте в файл config/moonshine.php:

[
    'media_manager' => [
        // Автоматическое добавление в меню
        'auto_menu' => true,
        // Корневая директория
        'disk' => config('filesystem.default', 'public'),
        // Разрешенные для загрузки расширения файлов
        'allowed_ext' => 'jpg,jpeg,png,pdf,doc,docx,zip',
        // Вид менеджера по-умолчанию
        'default_view' => 'table',
    ]
]

Для добавления в меню в app/MoonShine/Layouts/MoonShineLayout.php:

use YuriZoom\MoonShineMediaManager\Pages\MediaManagerPage;

protected function menu(): array
{
    return [
        MenuItem::make(new MediaManagerPage()),
    ];
}

Разработка

Для сборки ассетов (JS + CSS) из исходников:

npm install
npm run build

Готовые файлы появятся в dist/. Для публикации в проекте:

php artisan vendor:publish --tag=moonshine-media-manager-assets --force

Лицензия

The MIT License (MIT).