nepster-web / yii2-faceviewer-widget
用户视图显示小部件
Requires
- yiisoft/yii2: *
This package is auto-updated.
Last update: 2024-09-23 00:19:20 UTC
README
用户视图显示小部件(例如头像或照片)。
FaceViewer在需要按不同模板显示用户视图并单独显示时非常有用。例如:用户消息中的头像、评论中的照片、个人资料图片等。
显示示例
安装
推荐通过 composer 安装此小部件。
在控制台中运行
php composer.phar require --prefer-dist nepster-web/yii2-faceviewer-widget "*"
或添加
"nepster-web/yii2-faceviewer-widget": "*"
到 composer.json
文件中的 require 部分。
配置
所有设置
template
- 视图模板。可以是字符串或回调函数。
{face} - 转换为图像。
额外的属性应与 data
中的属性匹配。例如,如果模板中指定了 {name},则将在 data
数组或用户模型的属性中(如果指定了其标识符 userId
)查找 name 的值。
templateUrl
- 将视图模板封装在 URL 地址中。
templateUrlOptions
- 如果视图模板封装在 URL 地址中,则可以向链接添加任何属性。
data
- 替换到模板中的数据数组({name} 将对应于 $data['name'])。
userId
- 如果我们正在处理用户,则可以使用用户标识符代替 data
,这时 faceviewer 将自行获取所需的所有信息。
userModel
- 用户模型的命名空间。
userProfileRelated
- 用户个人资料相关关系的名称。
userModelAttributes
- 在请求中获取的用户属性。
faceField
- 指示图像的属性名称(例如:avatar_url)。
facePath
- 例如头像的目录的完整路径(例如:@statics/uploads/avatars)。
faceUrl
- 例如头像文件夹的 URL 地址(例如:/statics/uploads/avatars)。
faceUrlDefault
- 例如默认头像文件夹的 URL 地址(例如:/statics/templates/default/avatars)。
faceDefault
- 默认图像名称,例如头像(no-avatar.png)。
faceSexField
- 指示性别的属性名称(例如:sex)。
faceSexDefaultAvatar
- 根据用户性别默认图像(例如 [1 => 'male.png', 2 => 'female.png'])。
其中 1 - 男性,2 - 女性。用作标识符的 1 或 2 是在 faceSexField
中指定的字段。
faceImgOptions
- 图像属性。
onlyUrl
- 只返回图像,不带额外标签。
使用示例
<?= \nepster\faceviewer\Widget::widget([ // шаблон отображения 'template' => '<div class="face">{face}</div> <br/> <strong>{username}</strong> <p>{name} {surname}</p>', // Поле текущего изображения 'faceField' => 'avatar_url', // Массив Данных пользователя 'data' => $model->user, // Url адрес с загруженными аватарками 'faceUrl' => '/statics/uploads/avatars', // Директория с загруженными аватарками на сервере 'facePath' => '@statics/uploads/avatars', // Url адрес с аватарками по умолчанию 'faceUrlDefault' => '/statics/templates/default/avatars', // Дефолтная аватарка 'faceDefault' => 'male.png' ]);?>
其他示例
<?php // Вывод изображения включая пол echo \nepster\faceviewer\Widget::widget([ 'template' => '{face} {name} {surname}', 'data' => [ 'name' => 'Виктория', 'surname' => 'Иванова', 'sex' => 2, // К примеру 1 - М, 2 - Ж ], 'faceUrl' => '/statics/uploads/avatars', 'facePath' => '@statics/uploads/avatars', 'faceUrlDefault' => '/statics/default', 'faceDefault' => 'no-avatar.png', 'faceField' => 'image_url', 'faceSexField' => 'sex', // Дефолтные изображения исходя из поля sex 'faceSexDefaultAvatar' => [ 1 => 'male.png', 2 => 'female.png' ] ]); ?>
<?php // Вывод изображения по ID пользователя echo \nepster\faceviewer\Widget::widget([ 'template' => '{face} {name} {surname}', 'userId' => 333, 'faceUrl' => '/statics/uploads/avatars', 'facePath' => '@statics/uploads/avatars', 'faceUrlDefault' => '/statics/default', 'faceDefault' => 'no-avatar.png', 'faceField' => 'avatar_url', 'userModel' => 'common\modules\users\models\User', 'userModelAttributes' => ['name', 'surname', 'avatar_url'] ]); ?>
<?php // Использование callback-функции echo \nepster\faceviewer\Widget::widget([ 'template' => function($data) { // Массив всех доступных данных var_dump($data); }, 'data' => [ 'name' => 'Иван', 'surname' => 'Иванов', ], 'faceUrl' => '/statics/uploads/avatars', 'facePath' => '@statics/uploads/avatars', 'faceUrlDefault' => '/statics/templates/default/avatars', 'faceDefault' => 'no-avatar.png', 'faceField' => 'image_url' ]); ?>
注意,如果您的结构中存在用户表和用户资料表的分离,则可以使用以下语法
'userModelAttributes' => ['username', 'profile' => ['avatar_url', 'name', 'surname'] ],
FaceViewer 将从主模型中获取 username 属性,并尝试从用户资料关系获取 avatar_url、name 和 surname 属性。
建议
如果您多次使用此小部件,则不需要在每次调用小部件时直接更改设置。可以实现传递默认配置。
为此可以使用 依赖注入(DI)
// Настройки по умолчанию для виджета faceviewer \Yii::$container->set('nepster\faceviewer\Widget', [ // Url адрес с загруженными аватарками 'faceUrl' => '/statics/uploads/avatars', // Директория с загруженными аватарками на сервере 'facePath' => '@statics/uploads/avatars', // Url адрес с аватарками по умолчанию 'faceUrlDefault' => '/statics/templates/default/avatars', // Дефолтная аватарка 'faceDefault' => 'no-avatar.png' ]);
可以将在代码中提供的代码放置在所需模块的 init
方法中,或者放置在通用控制器中的 init
方法中。