yii2小部件(widget)
一、创建一个简单的小部件
namespace common\components; //common需要自己先设定一个别名 use yii\base\Widget; //小部件需要继承的基类
use yii\helpers\Html; class HelloWidget extends Widget
{
public $message; //使用小部件时传递的参数 /**
* init() 方法处理小部件属性,
*/
public function init()
{
parent::init(); // TODO: Change the autogenerated stub
if($this->message == null){
$this->message = 'Hello World';
}
}
/**
* run() 方法包含小部件生成渲染结果的代码。
* 渲染结果可在run()方法中直接"echo"输出或以字符串返回
*/
public function run()
{
return Html::encode($this->message);
}
}
使用这个小部件只需在视图中简单使用如下代码:
<?php
use common\components\HelloWidget;
?>
<?= HelloWidget::widget(['message'=>'How are you doing']) ?>
示例:下面这个小部件是将配置字段中在需药显示的场景中显示一个 checkbox
namespace common\components; use \yii\base\Widget;
use yii\helpers\ArrayHelper;
use \yii\helpers\Html;
use \yii\helpers\Json; class FieldWidget extends Widget
{
/**
* @var string $name checkbox的name值
*/
public $name = 'field-name'; /**
* @var array $options checkbox的选项数组
*/
public $options = []; /**
* @var string $scenario 显示的场景
*/
public $scenario = null; /**
* @var array $data 提供的数据
*/
public $data = null; /**
* @var array $exclude 不需要显示的内容
*/
public $exclude = []; /**
* @var obj $model 模型
*/
public $model = null; public function init()
{
parent::init(); // TODO: Change the autogenerated stub
} /**
* @purpose:给每一个需要显示的字段显示一个checkbox
* @param $item 渲染标签的数据
*/
public function renderItem($item)
{
//可显示的地方,比如 list,export
$visible = explode(',',$item['visible']);
//配置数据
$data = Json::decode($item['data']);
if(in_array($item['field_name'],$this->exclude)){
return;
}
if(in_array($this->scenario,$data['visible'])){
$this->options = ArrayHelper::merge($this->options,[
'data'=>[
'id'=>$item['id'],
'field'=>$item['field_name'],
'scenario'=>$this->scenario,
],
]);
echo Html::beginTag('div',['class'=>'field-div']);
echo Html::beginTag('label',[
'class'=>'field-label',
]);
echo Html::checkbox($this->name,in_array($this->scenario,$visible),$this->options);
echo ArrayHelper::getValue($this->model,$item['field_name'],$item['field_label']);
echo Html::endTag('label');
echo Html::endTag('label');
echo Html::endTag('div');
}
} public function run()
{
if(empty($this->data)){
return;
}
echo Html::beginTag('div',['class'=>'row-div']);
foreach($this->data as $item){
$this->renderItem($item);
}
echo Html::endTag('div');
}
}
使用这个小部件:
//这个数据是controller提供的
<?php $data = [
0=>[
'id' => 1,
'company_id'=>0,
'branch_id'=>0,
'table_name'=>'customer',
'field_name'=>'customer_name',
'field_label'=>'客户名称',
'input_type'=>'text',
'expression'=>'', //运算表达式
'type'=>'native', //native表示数据库里面的字段,extend表示拓展字段
'visible'=>'system',//显示的列
'data'=>'{"visible":["system"]}', //配置数据
],
1=>[
'id' => 2,
'company_id'=>0,
'branch_id'=>0,
'table_name'=>'customer',
'field_name'=>'sex',
'field_label'=>'性别',
'input_type'=>'text',
'expression'=>'',
'type'=>'native',
'visible'=>'system',
'data'=>'{"visible":["system"]}',
],
]?> <?= common\components\FieldWidget::widget([
'data'=>$data,
'scenario'=>'system',
'exclude'=>['sex'],
]); ?>
`
yii2小部件(widget)的更多相关文章
- YII2 小部件(widgets)
小部件基本上在views中使用,在视图中可调用 yii\base\Widget::widget() 方法使用小部件. 该方法使用 配置 数组初始化小部件并返回小部件渲染后的结果. 例如如下代码插入一个 ...
- Android小部件Widget开发过程中的坑和总结
@ 目录 概述 官方参考 效果图 AndroidManifest.xml Receiver Service Options res/xml/ widget_desktop_options.xml 常用 ...
- eclipse Swt编程—窗口小部件widget
1.标签Label // 标签(Label类)组件是SWT中最简单的组件.Label类的构造方法和格式如下: // Label(Composite parent,
- Yii2的相关学习记录,alert等美化、confirm异步、session中的flash及小部件的使用(六)
呃,系统自带的alert.confirm等弹出框实在是难看,作为一个颜控,这能忍? 这里我用的是kartik-v/yii2-dialog,这个是基于bootstrap3-dialog这个来做了一些常用 ...
- Yii2之ListView小部件
ListView是yii框架中类似GridView,也是用于展示多条数据的小部件,相比GridView,ListView可以更加灵活地设置数据展示的格式. 下面以我自己做的一个使用ListView来展 ...
- Yii2 DetailView小部件
DetailView小部件 Yii 提供了一套数据库小部件 widgets,这些小部件可以用于显示数据 DetailView 小部件用于显示一条记录数据 ListView 和 GridView 可以用 ...
- yii2 Gridview网格小部件
Gridview 网格小部件 一.特点: 1.是yii中功能最强大的小部件之一: 2.非常适合快速建立系统的管理后台. 3.用 dataProvider 键来指定数据的提供者 4.用 filterMo ...
- 教你在Yii2.0框架中如何创建自定义小部件
本教程将帮助您创建自己的自定义小部件在 yii framework 2.0.部件是可重用的模块和用于视图. 创建一个小部件,需要继承 yii\base\Widget,覆盖重写 yii\base\Wid ...
- 在android程序中加入widget(窗口小部件)并与之交互的关键代码
摘要: widget(窗口小部件)可以增强应用程序的交互性, 是很多应用中都会用到的功能,本文不求大而全,但是会给出程序与widget交互的关键代码 正文: 其实widget是嵌入(embedded) ...
随机推荐
- 处理OSS上传失败一例
问题描述: 上传oss云存储,无法成功,报错: 2019-01-29 17:44:59,552 oss2.api [ERROR] 140080008111872 : Exception: {'stat ...
- Centos7+ASP.Net Core 运行
一:ASP.Net Core跨平台运行,需要在Linux安装运行环境.本机器使用的Centos,下载安装地址为:https://www.microsoft.com/net/core#centos su ...
- AndroidStudio在线搜索最新版本的依赖库
操作步骤 打开File–>Project Structure 选中当前项目,点击Denpendencies标签 点击+,选Library dependency 打开界面如下: 输入想要的依赖库部 ...
- centos环境gcc版本升级
今天项目需要做node.js项目的性能测试,通过在centos上搭建nodejs环境 安装过程中提示:
- Python 实现红绿灯
一.通过Event来实现两个或多个线程间的交互,下面是一个红绿灯的例子,即起动一个线程做交通指挥信号灯,一个线程做车辆,车辆行驶按红灯停,绿灯行的规则. #!/usr/bin/python # -*- ...
- [转,讲的非常精彩]CIDR地址块及其子网划分(内含原始IP地址分类及其子网划分的介绍)
http://blog.csdn.net/dan15188387481/article/details/49873923 CIDR地址块及其子网划分(内含原始IP地址分类及其子网划分的介绍) 1. ...
- CentOS 7.2配置Apache服务httpd小伙伴们可以参考一下
这篇文章主要为大家详细介绍了CentOS 7.2配置Apache服务 httpd上篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 一.Perl + mod_perl 安装mod_perl使Per ...
- Centos7使用yum命令安装Mysql5.6.X
首先:具体的安装步骤在mysql官方文档上都有详细的描述. 文档虽然是英文,不过很容易理解,我就不一一翻译了. 官方文档地址:https://dev.mysql.com/doc/refman/5.6/ ...
- QT +go 开发 GUI程序
,转载 https://blog.csdn.net/lanbery/article/details/81745611 如果你是一个墨守成规的coding,请移步其他内容,这部分内容可能不适合你.如 ...
- 2018 icpc 青岛网络赛 J.Press the Button
Press the Button Time Limit: 1 Second Memory Limit: 131072 KB BaoBao and DreamGrid are playing ...