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) ...
随机推荐
- k-近邻算法-优化约会网站的配对效果
KNN原理 1. 假设有一个带有标签的样本数据集(训练样本集),其中包含每条数据与所属分类的对应关系. 2. 输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较. a. 计算新 ...
- java.net.ConnectException: Call From slaver1/192.168.19.128 to slaver1:8020 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org
1:练习spark的时候,操作大概如我读取hdfs上面的文件,然后spark懒加载以后,我读取详细信息出现如下所示的错误,错误虽然不大,我感觉有必要记录一下,因为错误的起因是对命令的不熟悉造成的,错误 ...
- WPF多屏最大化
如果计算机存在多个显示器,这时设置wpf窗口为最大化,窗口只能在主显示器中实现最大化,如果想要实现窗口拉伸至多屏,需要获取所有显示器分辨率之和.这时用到了System.Windows.SystemPa ...
- Linux 下压缩与解压.zip和.rar
)对于.zip linux下提供了zip和unzip程序,zip是压缩程序,unzip是解压程序.它们的参数选项很多,可用命令zip -help和unzip -help查看,这里只做简单介绍,举例说明 ...
- Android Studio运行项目报错:Error:null value in entry: annotationProcessorOutputFolder=null的解决方案
一般是在Android studio异常退出(比如强制关机)后,重新打开后运行项目出现该问题. 解决方案 删除项目根目录的.gradle文件夹,然后Clean Project —— Rebulid ...
- java流程控制语句总结
1.选择结构 if 方式1: 格式: if(条件表达式) { 语句体; } 执行流程: 如果条件表达式值为true, 执行语句体 如果条件表达式值为false,不执行语句体 方式2: 格式: if(条 ...
- hdu2036
题解: 求多边形面积 分成很多块三角形求就可以了 凹的也是支持的 代码: #include <bits/stdc++.h> using namespace std; #define rin ...
- 1. ELK 之elasticsearch 简介、获取、安装
简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Ap ...
- Python_os模块
os模块:可以处理文件和目录,是Python系统和操作系统进行交互的一个接口 os模块常用方法: os.getcwd(): 获取当前工作目录,(即当前Python脚本工作的目录路径) os.chdir ...
- List接口相对于Collection接口的特有方法
[添加功能] 1 void add(int index,Object element); // 在指定位置添加一个元素. [获取功能] 1 Object get(int index); // 获取指定 ...