besnovatyj/yii2-cms-file-manager

Standalone-виджет файлового менеджера для Yii2 (ядро filemanager-core + AssetBundle + PHP-виджет). Без CKEditor.

Maintainers

Package info

github.com/besnovatyj/yii2-cms-file-manager

Type:yii2-extension

pkg:composer/besnovatyj/yii2-cms-file-manager

Transparency log

Statistics

Installs: 1

Dependents: 1

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-07-06 19:10 UTC

This package is auto-updated.

Last update: 2026-07-08 15:36:59 UTC


README

Standalone-виджет файлового менеджера для Yii2 — без CKEditor. Тонкая обёртка над ядром @besnovatyj/filemanager-core: здесь только сборка ядра в собственный dist/ + PHP-виджет и AssetBundle. Вся доменная логика ФМ — в ядре.

Это «брат» виджета редактора besnovatyj/yii2-cms-ckeditor5: тот монтирует CKEditor, этот — чистый файловый менеджер. Для интеграции ФМ внутрь редактора используется отдельный CKEditor-плагин besnovatyj/ckeditor5-filemanager.

Что внутри

assets/index.ts                 # реэкспорт публичного API ядра (createApp, …) → dist/file-manager.js
esbuild.js                      # сборка: ядро filemanager-core бандлится внутрь, CSS уже вшит в JS
src/FileManagerWidget.php       # PHP-виджет: кнопка-триггер + init-модуль (createApp().open())
src/FileManagerCoreAsset.php    # AssetBundle: публикует dist/file-manager.js (JS грузится import()-ом)
dist/                           # собранный file-manager.js (КОММИТИТСЯ — потребляется без Node)

ckeditor5 нигде не участвует. dist/file-manager.js — ESM-модуль с именованным экспортом createApp, который виджет грузит динамическим import().

Сборка TS (нужен Node/Docker)

# 1) сначала собрать ядро (виджет бандлит его dist):
( cd ../../npm/filemanager-core && npm install && npm run build )

# 2) затем виджет:
npm install        # подтянет @besnovatyj/filemanager-core по file:../../npm/filemanager-core
npm run build      # → dist/file-manager.js (ядро вбандлено, CSS вшит)

dist/ коммитится в git. Потребляющий проект Node не использует.

Использование

Picker в форме (ActiveForm)

Поле + кнопка; двойной клик по файлу кладёт его URL (или иной атрибут) в поле:

use Besnovatyj\FileManager\FileManagerWidget;

echo $form->field($model, 'image')->widget(FileManagerWidget::class, [
    'fmDefaultPath' => '/blog',
    // 'returnAttribute' => 'path', // что класть в поле: url (по умолчанию) | path | key | name
]);

Или напрямую:

echo FileManagerWidget::widget([
    'model' => $model,
    'attribute' => 'image',
]);

Просто открыть менеджер (browser-режим)

Без модели и name поле не выводится — только кнопка, открывающая ФМ:

echo FileManagerWidget::widget(['triggerLabel' => 'Файлы']);

Настройки виджета

Свойство По умолчанию Назначение
model/attribute picker через ActiveForm
name/value picker без модели
showInput true выводить ли поле (авто-false, если нет ни модели, ни name)
returnAttribute 'url' свойство выбранного файла, кладущееся в поле (url/path/key/name)
triggerLabel 'Файловый менеджер' подпись кнопки
triggerOptions [] HTML-опции кнопки
fmConnector '/file/backend/file-manager' URL коннектора бэкенда ФМ (серверная часть — в yii2-cms-file)
fmDefaultPath '/' стартовая директория и путь загрузки по умолчанию
fmHeaders [] доп. HTTP-заголовки (мёржатся поверх CSRF/Ajax-заголовков)

Бэкенд-коннектор (file-manager) живёт в файловом модуле besnovatyj/yii2-cms-file — это серверная часть, к которой обращается ФМ; URL настраивается свойством fmConnector.