oleg-chulakov-studio / yii2-fileinput
Based on Krajee (kartik-v) advanced fileinput widget with no-ajax files removal posibility
Installs: 4 887
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 6
Forks: 0
Open Issues: 0
Requires
- php: >=5.6.0
- kartik-v/yii2-widget-fileinput: ~1.0.0
- oleg-chulakov-studio/yii2-filestorage: ^1.1
- yiisoft/yii2: ~2.0.16
This package is auto-updated.
Last update: 2024-10-21 01:37:28 UTC
README
Обертка над виджетом Krajee File Input widget. Реализует логику удаления файлов через скрытое поле, без AJAX. Добавляет упрощенную конфигурацию виджета FileInput, используя специальное поведение. Реализует удобную AJAX-сортировку карточек файлов виджета.
Использование
Загрузка файлов
<?php $form = ActiveForm::begin([ 'options' => ['enctype' => 'multipart/form-data'] ]); ?> ... <?= $form->field($model, 'images[]')->widget(\chulakov\fileinput\widgets\FileInput::className(), [ 'options' => [ 'multiple' => true ], 'pluginOptions' => [ 'initialPreview' => $model->getImagesInitial(), 'initialPreviewConfig' => $model->getImagesInitialConfig(), 'overwriteInitial' => false, 'showUpload' => false, 'showClose' => false, 'showRemove' => false, 'fileActionSettings' => [ 'showRemove' => true, ], ], ... ]); ?> ... <div class="form-group"> <?= Html::submitButton(Save, ['class' => 'btn btn-success']) ?> </div> <?php ActiveForm::end(); ?>
Изменени порядка следования файлов (сортировка) в фиджете
Для того, чтобы сортировка работатал, при конфигурации виджета необходимо задать параметр sortActionRoute
.
Этот параметр содержит маршрут к AJAX-действию, которое производит непосредственное изменение порядка следования файлов.
Иконка перетаскивания картточек появится автоматически, если этот параметр задан.
Механизм изменения порядка следования полностью совместим с механизмом работы пакета sem-soft/yii-sortable. Для сортировки файлов можно использовать этот пакет. Пример конфигурации совместной работы виджета и backend-сортировки представлен ниже.
<?php $form = ActiveForm::begin([ 'options' => ['enctype' => 'multipart/form-data'] ]); ?> ... <?= $form->field($model, 'images[]')->widget(FileInput::className(), [ 'options' => [ 'multiple' => true ], // !!! 'sortActionRoute' => ['swap'], // --- 'pluginOptions' => [ 'initialPreview' => $model->getImagesInitial(), 'initialPreviewConfig' => $model->getImagesInitialConfig(), 'overwriteInitial' => false, 'showUpload' => false, 'showClose' => false, 'showRemove' => false, 'fileActionSettings' => [ 'showRemove' => true, ], ], ... ]); ?> ... <div class="form-group"> <?= Html::submitButton(Save, ['class' => 'btn btn-success']) ?> </div> <?php ActiveForm::end(); ?>
После установки пакета sem-soft / yii-sortable, необходимо сконфигурировать swap
-действие в соответствующем контроллере.
<?php ... use sem\sortable\actions\DragDropMoveAction; use Yii; ... class SliderController extends Controller { ... public function actions() { return [ ... 'swap' => [ 'class' => DragDropMoveAction::class, 'modelClass' => Image::class, ], ... ]; } }
Также необходимо подключить поведение, которое будет задавать очередное значение поля sort
при вставке новой записи.
<?php ... use Yii; use sem\sortable\behaviors\SortAttributeBehavior; ... class Image extends ActiveRecord { ... public function rules() { return [ ... [['sort'], 'number'], ... ]; } ... public function behaviors() { return [ ... SortAttributeBehavior::class, ... ]; } }
Более детальную информацию можно получить в описании пакета sem-soft / yii-sortable.
Получение информации предварительного просмотра при помощи поведения
Можно скоратить время на конфигурацию виджета FileInput
для подготовки миниатюр загруженных ранее файлов.
При условии что управление файлами осуществляется с помощью компонента yii2-filestorage.
Поведение FileModelBehavior
добавляет модели формы два метода getInitialPreview
and getInitialPreviewConfig
.
Оба метода получают параметр attribute
, указывающий имя атрибута формы, содержащего загруженные ранее сущности файлов для построения информации предпросмотра в виджете.
Эти методы виджет будет вызывать автоматически при своей инициализации, если выполняются условия:
- Форма построена на основе виджета ActiveForm
- При конфигурации виджета не заданы ключи
initialPreview
,initialPreviewConfig
параметраpluginOptions
- При конфигурации виджета задан параметр
attachedFilesAttribute
, который указывает на имя атрибута формы содержащего загруженные ранее сущности файлов - К модели формы подключено поведение
\chulakov\fileinput\behaviors\FileModelBehavior
Пример конфигурации виджет FileInput
<?= $form->field($model, 'images[]')->widget(\chulakov\fileinput\widgets\FileInput::className(), [ 'options' => [ 'multiple' => true ], 'sortActionRoute' => ['swap'], // !!!! 'attachedFilesAttribute' => 'imagesAttached', // ---- 'pluginOptions' => [ 'overwriteInitial' => false, 'showUpload' => false, 'showClose' => false, 'showRemove' => false, 'fileActionSettings' => [ 'showRemove' => true, ], ] ]); ?>
Поведение FileModelBehavior
подключается в модели формы.
Дополнительная конфигурация этого поведения не требуется.
... class GalleryForm extends \yii\base\Model { ... /** * @inheritdoc */ public function behaviors() { return [ ... [ 'class' => \chulakov\fileinput\behaviors\FileModelBehavior::class, ] ]; } ... }
Дополнительно:
- Поведение получения идентификатора владельца файла FileOwnerBehavior