DerekIsBusy/yii2-filemanager

Yii2 文件管理器

安装: 20

依赖: 0

建议: 0

安全性: 0

星标: 0

关注者: 2

分支: 94

类型:yii2-extension

dev-master 2017-01-12 16:43 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:21:10 UTC


README

本模块提供接口,以便在统一位置收集和访问所有媒体文件。灵感来源于 WordPress 文件管理器。

功能

  • 与 TinyMCE 编辑器集成。
  • 自动为上传的文件创建实际目录,如 "2014/12"。
  • 自动为上传的图片创建缩略图
  • 无限数量的缩略图集
  • 所有媒体文件都存储在数据库中,允许您将对象附加到不链接到图像的媒体文件,以及媒体文件的ID。这提供了更大的灵活性,因为将来很容易更改缩略图的大小。
  • 如果您更改缩略图的大小,可以在设置中调整所有现有缩略图的大小。

屏幕截图

安装

安装此扩展的首选方式是通过 composer

运行

php composer.phar require --prefer-dist derekisbusy/yii2-filemanager "*"

或在您的 composer.json 文件的 "require" 部分中添加

"derekisbusy/yii2-filemanager": "*"

应用迁移

yii migrate --migrationPath=vendor/derekisbusy/yii2-filemanager/migrations

配置

'modules' => [
    'filemanager' => [
        'class' => 'derekisbusy\filemanager\Module',
        // Upload routes
        'routes' => [
            // Base absolute path to web directory
            'baseUrl' => '',
            // Base web directory url
            'basePath' => '@frontend/web',
            // Path for uploaded files in web directory
            'uploadPath' => 'uploads',
        ],
        // Thumbnails info
        'thumbs' => [
            'small' => [
                'name' => 'Мелкий',
                'size' => [100, 100],
            ],
            'medium' => [
                'name' => 'Средний',
                'size' => [300, 200],
            ],
            'large' => [
                'name' => 'Большой',
                'size' => [500, 400],
            ],
        ],
    ],
],

默认情况下,缩略图以 "outbound" 或 "fill" 模式调整大小。要切换到 "inset" 或 "fit" 模式,请使用 mode 参数并提供。可能的值:outbound (\Imagine\Image\ImageInterface::THUMBNAIL_OUTBOUND) 或 inset (\Imagine\Image\ImageInterface::THUMBNAIL_INSET)

'thumbs' => [
    'small' => [
        'name' => 'Мелкий',
        'size' => [100, 100],
    ],
    'medium' => [
        'name' => 'Средний',
        'size' => [300, 200],
    ],
    'large' => [
        'name' => 'Большой',
        'size' => [500, 400],
        'mode' => \Imagine\Image\ImageInterface::THUMBNAIL_INSET
    ],
],

用法

简单的独立字段

use pendalf89\filemanager\widgets\FileInput;

echo $form->field($model, 'original_thumbnail')->widget(FileInput::className(), [
    'buttonTag' => 'button',
    'buttonName' => 'Browse',
    'buttonOptions' => ['class' => 'btn btn-default'],
    'options' => ['class' => 'form-control'],
    // Widget template
    'template' => '<div class="input-group">{input}<span class="input-group-btn">{button}</span></div>',
    // Optional, if set, only this image can be selected by user
    'thumb' => 'original',
    // Optional, if set, in container will be inserted selected image
    'imageContainer' => '.img',
    // Default to FileInput::DATA_URL. This data will be inserted in input field
    'pasteData' => FileInput::DATA_URL,
    // JavaScript function, which will be called before insert file data to input.
    // Argument data contains file data.
    // data example: [alt: "Ведьма с кошкой", description: "123", url: "/uploads/2014/12/vedma-100x100.jpeg", id: "45"]
    'callbackBeforeInsert' => 'function(e, data) {
        console.log( data );
    }',
]);

echo FileInput::widget([
    'name' => 'mediafile',
    'buttonTag' => 'button',
    'buttonName' => 'Browse',
    'buttonOptions' => ['class' => 'btn btn-default'],
    'options' => ['class' => 'form-control'],
    // Widget template
    'template' => '<div class="input-group">{input}<span class="input-group-btn">{button}</span></div>',
    // Optional, if set, only this image can be selected by user
    'thumb' => 'original',
    // Optional, if set, in container will be inserted selected image
    'imageContainer' => '.img',
    // Default to FileInput::DATA_URL. This data will be inserted in input field
    'pasteData' => FileInput::DATA_URL,
    // JavaScript function, which will be called before insert file data to input.
    // Argument data contains file data.
    // data example: [alt: "Ведьма с кошкой", description: "123", url: "/uploads/2014/12/vedma-100x100.jpeg", id: "45"]
    'callbackBeforeInsert' => 'function(e, data) {
        console.log( data );
    }',
]);

与 TinyMCE 一起使用

use pendalf89\filemanager\widgets\TinyMCE;

<?= $form->field($model, 'content')->widget(TinyMCE::className(), [
    'clientOptions' => [
           'language' => 'ru',
        'menubar' => false,
        'height' => 500,
        'image_dimensions' => false,
        'plugins' => [
            'advlist autolink lists link image charmap print preview anchor searchreplace visualblocks code contextmenu table',
        ],
        'toolbar' => 'undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image | code',
    ],
]); ?>

在模型中,您必须设置媒体文件行为,如下例所示

use pendalf89\filemanager\behaviors\MediafileBehavior;

public function behaviors()
{
    return [
        'mediafile' => [
            'class' => MediafileBehavior::className(),
            'name' => 'post',
            'attributes' => [
                'thumbnail',
            ],
        ]
    ];
}

然后,您可以从所有者模型中获取媒体文件。请参见示例

use pendalf89\filemanager\models\Mediafile;

$model = Post::findOne(1);
$mediafile = Mediafile::loadOneByOwner('post', $model->id, 'thumbnail');

// Ok, we have mediafile object! Let's do something with him:
// return url for small thumbnail, for example: '/uploads/2014/12/flying-cats.jpg'
echo $mediafile->getThumbUrl('small');
// return image tag for thumbnail, for example: '<img src="/uploads/2014/12/flying-cats.jpg" alt="Летающие коты">'
echo $mediafile->getThumbImage('small'); // return url for small thumbnail