sergmoro1 / yii2-byone-uploader
文件上传小部件。使用 Blueimp 和 JCrop jQuery 插件。易于设置,快速上手。
此包的官方仓库似乎已不存在,因此该包已被冻结。
Requires
- php: >=5.4.0
- bower-asset/jcrop: *
- bower-asset/jquery-file-upload: *
- yiisoft/yii2: *
- yiisoft/yii2-jui: ~2.0.0
This package is auto-updated.
Last update: 2019-12-22 13:17:10 UTC
README
不再维护,请使用下一个版本 sergmoro1\yii2-uploader
演示
按类别查看照片。(当编辑时)照片库 "之前" & "之后"(类似)。
优点
如果模型需要文件,您不需要
- 在模型中定义
file属性, - 处理表单填充的结果,
- 想出保存文件的地方,
您可以在
- 文件上添加描述,
- 删除不需要的文件,
- 定义压缩图像的大小,
- 裁剪图像,
- 通过鼠标交换文件行。
如何制作?
所有上传文件的有关信息都存储在一个表格中 - onefile。不需要在需要文件的模型中定义类型为 file 的字段。
文件被上传并存储在目录 frontend/web/files 中。对于每个模型,可以可能有子目录: frontend/web/files/user 或 frontend/web/files/post。在子目录中,文件按用户(或帖子)和大小排列
frontend/web/files/user/2frontend/web/files/user/2/thumbfrontend/web/files/user/2/original
可以通过拖动鼠标行来排序上传文件行。
示例
用户必须可以上传照片。需要在模型common/models/User 中定义...
use sergmoro1\uploader\FilePath;
use sergmoro1\uploader\models\OneFile;
...
class User extends ActiveRecord implements IdentityInterface
{
...
// Images sizes
public $sizes = [
// Catalog original should be define for cropping
'original' => ['width' => 1600, 'height' => 900, 'catalog' => 'original'],
'main' => ['width' => 400, 'height' => 400, 'catalog' => ''],
'thumb' => ['width' => 90, 'height' => 90, 'catalog' => 'thumb'],
];
// Get ref to the file, make dir and so
public function behaviors()
{
return [
'FilePath' => [
'class' => FilePath::className(),
'file_path' => '/files/user/',
]
];
}
// All files for User model
public function getFiles()
{
return OneFile::find()
->where('parent_id=:parent_id AND model=:model', [
':parent_id' => $this->id,
':model' => 'common\models\User',
])
// only if rows should be draggable & sortable
->orderBy('created_at')
->all();
}
...
现在用户可以上传,文件将保存在
frontend/web/files/user/user_id frontend/web/files/user/user_id/original frontend/web/files/user/user_id/thumb
因此,大小将按指定的方式修改。
要执行上传,需要将小部件放置在表单或任何其他视图中。例如,在 backend/views/user/_form.php
use sergmoro1\uploader\widgets\Byone;
...
<?= Byone::widget([
'model' => $model,
'cropAllowed' => true,
]) ?>
如果需要裁剪图像(cropAllowed = true),则需要定义子目录 original。裁剪的纵横比在 main 子目录中设置。默认情况下,只有 main 图像将被裁剪,但您可以通过定义参数 crop 来指定任何其他目录(除了 original)。
public $sizes = [
'original' => ['width' => 3600, 'height' => 2400, 'catalog' => 'original'],
'main' => ['width' => 400, 'height' => 400, 'catalog' => ''],
'thumb' => ['width' => 120, 'height' => 80, 'catalog' => 'thumb', 'crop' => true],
];
可以上传任何数量的文件,但文件数量可以通过 maxFiles 限制。
安装
在应用程序目录中
$ composer require sergmoro1/yii2-byone-uploader "dev-master"
运行迁移
$ php yii migrate --migrationPath=@vendor/sergmoro1/yii2-byone-uploader/migrations
要在应用程序中注册模块 - common/config/main.php
'modules' => [
'uploader' => [
'class' => 'sergmoro1\uploader\Module',
],
如果使用 advanced 模板,则应定义 before_web 参数。例如 backend\config\params.php
<?php
return [
'before_web' => 'backend',
...
];
对于 frontend 或 basic 模板则不需要。
上传文件的描述
您可以为文件留下评论。为此,在表单 backend/views/user/_form.php 中,在已提到的小部件中,需要添加参数 appendeixView
...
<?= Byone::widget([
'model' => $model,
'appendixView' => '/user/appendix',
'cropAllowed' => true,
]) ?>
并添加视图,例如 backend/views/user/appendix.php 以下内容
<span id='description'>
<?php echo isset($file->vars->description) ? $file->vars->description : ''; ?>
</span>
默认定义了 description 字段,但字段不限。
选项
cropAllowed (false) 如果需要裁剪图片,必须在模型的 $sizes 数组中定义 'original' 大小。
draggable (false) 如果需要交换上传的文件,则必须在获取器 getFiles() 中按 created_at 排序行。
public function getFiles()
{
return OneFile::find()
->where('parent_id=:parent_id AND model=:model', [
':parent_id' => $this->id,
':model' => 'common\models\YourModel',
])
->orderBy('created_at')
->all();
}
acceptFileTypes ('image\/[jpeg|jpg|png|gif]')
minFileSize (0.1Mb)
maxFileSize (2Mb)
maxFiles (0 - 任意数量)
secure (true) 普通扩展名需要用户授权,但验证可能被关闭。