oleg-chulakov-studio/yii2-fileinput

基于Krajee (kartik-v)高级文件输入小部件,没有ajax文件删除功能

1.0.4 2019-09-20 13:57 UTC

This package is auto-updated.

Last update: 2024-09-21 01:19:40 UTC


README

覆盖Krajee File Input小部件。通过隐藏字段实现文件删除逻辑,不使用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包的工作机制完全兼容。可以使用此包进行文件排序。下面是示例配置,说明如何共同配置小部件和后端排序。

   <?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行为为表单模型添加了两个方法getInitialPreviewgetInitialPreviewConfig。这两个方法都接收参数attribute,指示包含已上传文件实体的表单字段的名称,用于在文件小部件中构建预览信息。

如果满足以下条件,小部件将在初始化时自动调用这些方法:

  • 基于ActiveForm构建的表单
  • 在配置小部件时未设置initialPreviewinitialPreviewConfig参数的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,
            ]
        ];
    }
    ...
}

附加信息