besnovatyj / yii2-cms-file-manager
Standalone-виджет файлового менеджера для Yii2 (ядро filemanager-core + AssetBundle + PHP-виджет). Без CKEditor.
Package info
github.com/besnovatyj/yii2-cms-file-manager
Type:yii2-extension
pkg:composer/besnovatyj/yii2-cms-file-manager
Requires
- php: >=8.4
- besnovatyj/yii2-cms-file: ^1.0
- yiisoft/yii2: ~2.0.0
- yiisoft/yii2-bootstrap5: ~2.0.0
Requires (Dev)
None
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-09-18 17:32:28 UTC
README
Standalone-виджеты файлового менеджера для Yii2 — без CKEditor. Тонкие обёртки над npm-ядрами:
здесь только сборка ядра в собственный dist/ + PHP-виджет и AssetBundle. Вся логика ФМ — в ядре.
Две линии (обе живут в пакете до полной замены v1 на v2):
| Линия | Ядро | Entry → dist | PHP |
|---|---|---|---|
| v2 (проводник) | @besnovatyj/filemanager-core2 |
assets/explorer.ts → dist/explorer.js |
ExplorerWidget, ExplorerAsset |
| v1 | @besnovatyj/filemanager-core |
assets/index.ts → dist/file-manager.js |
FileManagerWidget, FileManagerCoreAsset |
Серверная часть обеих линий — модуль besnovatyj/yii2-cms-file: v2 ходит на
/File/backend/api/{operation} (контракт bescms-fs, см. filemanager-core2/docs/API-CONTRACT.md),
v1 — на /File/backend/file-manager.
Сборка (Node только в Docker)
# 1) ядро v2 (и v1, если оно нужно): docker compose exec node sh -c 'cd /home/node/app/packages/npm/filemanager-core2 && npm install && npm run build' # 2) обёртка: docker compose exec node sh -c 'cd /home/node/app/vendor/besnovatyj/yii2-cms-file-manager && npm install && npm run build:local'
build:local (FM_CORE_LOCAL=1) берёт ядра из локальных packages/npm/*/dist; build — из
node_modules (ядро v2 пока подключено file:-зависимостью, после публикации в npm заменить на версию).
dist/ коммитится — потребляющий проект Node не использует.
v2: ExplorerWidget
Picker в форме
use Besnovatyj\FileManager\ExplorerWidget; echo $form->field($model, 'image')->widget(ExplorerWidget::class, [ 'startPath' => '/static/blog', 'pickFilter' => 'image', // только изображения // 'returnAttribute' => 'path', // что класть в поле: url (по умолчанию) | path | name // 'pickMultiple' => true, 'multipleSeparator' => "\n", ]);
Кнопка открывает проводник в окне; «Выбрать» (или двойной клик по файлу) кладёт значение в поле
и закрывает окно. Если у файла нет публичного URL (например, ZIP-хранилище), подставляется path.
Просто открыть менеджер
echo ExplorerWidget::widget(['triggerLabel' => 'Файлы']);
Встроить в страницу
echo ExplorerWidget::widget(['embedded' => true, 'height' => 'calc(100vh - 220px)', 'startPath' => '/static']);
Свойства
| Свойство | По умолчанию | Назначение |
|---|---|---|
model/attribute, name/value |
— | picker через ActiveForm / без модели |
showInput |
true |
поле рядом с кнопкой (авто-false без модели и name) |
returnAttribute |
'url' |
url / path / name выбранного узла |
pickMultiple, multipleSeparator |
false, "\n" |
множественный выбор |
pickFilter |
null |
'image' — только изображения |
embedded, height, containerOptions |
false, '600px', [] |
встроенный режим |
connector |
'/File/backend/api' |
базовый URL API |
startPath |
'/' |
стартовый виртуальный путь (/ — список хранилищ) |
scope |
null |
запереть менеджер в поддереве (UI + подписанный токен для сервера) |
headers |
[] |
доп. заголовки поверх CSRF/Ajax |
title |
'' |
заголовок окна |
storageKey |
null (= fm2:view) |
ключ localStorage настроек вида; '' — не сохранять |
theme |
'auto' |
auto / light / dark |
clientConfig |
[] |
любые поля ExplorerConfig ядра (функции — JsExpression) |
Мобильные устройства: раскладка и модель тапов подстраиваются автоматически (см.
filemanager-core2/docs/INTERACTION.md). Большие файлы грузятся кусками с докачкой (tus), если
бэкенд это объявляет (filemanager-core2/docs/UPLOAD-TUS.md).
Транслитерация кириллицы в именах загружаемых файлов — настройка бэкенда
(modules.File.params.fs.naming.transliterate), у виджета опции нет: имя формирует сервер.
v1: FileManagerWidget
Без изменений, см. историю пакета. Используйте только там, где v2 ещё не проверен.