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) ...
随机推荐
- caffe关闭建立网络的log输出
C++ google::InitGoogleLogging("XXX"); google::SetCommandLineOption("GLOG_minloglevel& ...
- 目标检测算法SSD之训练自己的数据集
目标检测算法SSD之训练自己的数据集 prerequesties 预备知识/前提条件 下载和配置了最新SSD代码 git clone https://github.com/weiliu89/caffe ...
- 下载离线VS2017
1.下载工具 版本 文件 Visual Studio Enterprise (企业版) vs_enterprise.exe Visual Studio Professional (专业版) vs_pr ...
- 如何把网址配置为http和https可以同时访问
1.打开iis7 ,找到具体站点 2.点击站点后右侧有个绑定按钮 3.点击绑定,增加https,设置端口,ssl选择 iis证书 4.找到ssl设置,要求证书不勾选,客户证书,忽略 5.如果右侧不显示 ...
- css3三角形冒泡泡图形制作
图一: 图二: <!DOCTYPE html> <html> <head> <title>css 三角形</title> <style ...
- CND网站加速
CDN是什么 1-CDN俗称网站加速2-公司一般是购买其他cdn服务商提供的服务3-CDN一般是用来缓存网站的静态资源文件的(css,js,图片,html,htm),浏览器获取某个静态资源是按照就近原 ...
- JMeter学习笔记2-图形界面简单介绍
废话少说直接干活的给: 一.打开和运行JMeter,出现UI界面.如图下所示: 工具栏:常见操作的图标集合,有New(新建), Template(模板) ,Save(保存),Start(开始) ,St ...
- Yii常用方法
//获取当前用户的ip Yii::$app->request->userIP
- Codechef EDGEST 树套树 树状数组 线段树 LCA 卡常
原文链接http://www.cnblogs.com/zhouzhendong/p/9016579.html 题目传送门 - Codechef EDGEST 题意 给定相同点集上的两棵生成树$T_1$ ...
- BZOJ1911 [Apio2010]特别行动队 - 动态规划 - 斜率优化
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 UPD(2018-04-01):用Latex重打了公式…… 题意概括 把一个整数序列划分成任意连续的段,使得划分出 ...