zoukankan      html  css  js  c++  java
  • yii2小部件(widget)

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

    namespace commoncomponents; //common需要自己先设定一个别名
    
    use yiiaseWidget; //小部件需要继承的基类
    use yiihelpersHtml;
    
    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 commoncomponentsHelloWidget;
    ?>
    <?= HelloWidget::widget(['message'=>'How are you doing']) ?>

    示例:下面这个小部件是将配置字段中在需药显示的场景中显示一个 checkbox

    namespace commoncomponents;
    
    use yiiaseWidget;
    use yiihelpersArrayHelper;
    use yiihelpersHtml;
    use yiihelpersJson;
    
    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"]}',
        ],
    ]?>
    
    <?= commoncomponentsFieldWidget::widget([
        'data'=>$data,
        'scenario'=>'system', 
        'exclude'=>['sex'], 
    ]); ?>

    `

  • 相关阅读:
    Ubuntu 12.04下GAMIT10.40安装说明
    GAMIT 10.50在Ubuntu 12.04系统下的安装
    tomcat 5.5 动态加载类
    GAMIT 10.50在Ubuntu 12.04系统下的安装
    RHCE 系列(九):如何使用无客户端配置 Postfix
    Nginx+Keepalived(带Nginx监控脚本)
    黑马程序员_java08_多线程
    oracle 表类型变量的使用
    如何在win7系统中安装redis
    bzoj 2816: [ZJOI2012]网络(splay)
  • 原文地址:https://www.cnblogs.com/chrdai/p/9049471.html
Copyright © 2011-2022 走看看