博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
yii2小部件(widget)
阅读量:4876 次
发布时间:2019-06-11

本文共 3612 字,大约阅读时间需要 12 分钟。

一、创建一个简单的小部件

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);    }}

使用这个小部件只需在视图中简单使用如下代码:

'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提供的
[ '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"]}', ],]?>
$data, 'scenario'=>'system', 'exclude'=>['sex'], ]); ?>

`

 

转载于:https://www.cnblogs.com/chrdai/p/9049471.html

你可能感兴趣的文章
SPF(图的割点)
查看>>
KMP算法的Next数组详解
查看>>
Brackets (区间DP)
查看>>
Tarjan算法
查看>>
Strategic Game(树形DP)
查看>>
迷宫城堡 (求强连通)
查看>>
Oulipo (KMP 统计出现次数,裸题)
查看>>
图的割点算法 与 图的割边算法
查看>>
KMP算法 最小循环节 最大重复次数
查看>>
Proving Equivalences (强连通,缩点)
查看>>
并查集(模板)
查看>>
Cell Phone Networ (树形dp-最小支配集)
查看>>
Count the string (KMP 中 next数组 的使用)
查看>>
Period (KMP算法 最小循环节 最大重复次数)
查看>>
聊聊Iconfont
查看>>
sgu 103. Traffic Lights
查看>>
poj 3621 Sightseeing Cows
查看>>
hdu 3666 THE MATRIX PROBLEM
查看>>
TopCoder SRM 176 Deranged
查看>>
java 内存模型
查看>>