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) ...
随机推荐
- Web的几种上传方式总结
问题 文件上传在WEB开发中应用很广泛. 文件上传是指将本地图片.视频.音频等文件上传到服务器上,可以供其他用户浏览或下载的过程. 以下总结了常见的文件(图片)上传的方式和要点处理. 表单上传 这是传 ...
- C#操作windows服务
本文主要说明了Windows服务的安装.卸载.启动.停止.获取服务安装路径.获取服务状态.检查服务是否存在.获取服务版本. 我们需要引用命名空间using System.Configuration.I ...
- 【bzoj5072】[Lydsy十月月赛]小A的树 树形背包dp
题解: 比较好想 首先注意到如果最暴力的做法复杂度无法接受 而5000的范围基本是n^2做法了 只使用已经遍历过的点数目和当前子树中的点数目转移我们知道复杂度是n^2的 于是大胆猜测一波同一个节点为根 ...
- python全栈开发day65-templates:tags、母版和继承、组件、静态文件相关、simple_tag和inclusion_tag
一.昨日内容回顾 1.MVC和MTV框架 MVC: model 模型 存写数据 view 视图 给用户展示页面 control 控制器 负责调度 传递指令 MTV: M:model 模型 OR ...
- mysql中trim()函数的用法
去除左空格函数: LTRIM(str) mysql> SELECT LTRIM(' barbar'); -> 'barbar' 去除右空格函数: RTRIM(str) mysql> ...
- Codeforces 633F The Chocolate Spree 树形dp
The Chocolate Spree 对拍拍了半天才知道哪里写错了.. dp[ i ][ j ][ k ]表示在 i 这棵子树中有 j 条链, 是否有链延伸上来. #include<bits/ ...
- TreeSet集合的自然排序与比较器排序、Comparable接口的compareTo()方法
[自然排序] package com.hxl; public class Student implements Comparable<Student> { private String n ...
- .NET Garbage Collection配置在.net core的写法
.net franework<configuration> <runtime> <gcServer enabled="true"/> <g ...
- day42 事物,数据库锁
事物是把一些sql语句作为一个原子性操作,就是说我会写好几条sql语句,然后我想把这好几条的sql语句作为一个整体,然后让这个整体一起去运行,不可以拆分开,就像我们用面粉做一个馒头一样,我需要把这些面 ...
- Java BigDecimal详解,提供了丰富的四舍五入规则
java.math.BigDecimal类提供用于算术,刻度操作,舍入,比较,哈希算法和格式转换操作. toString()方法提供BigDecimal的规范表示.它使用户可以完全控制舍入行为. 提供 ...