thinkPHP下的widget挂件原理与使用方法

来源:互联网 发布:蓝月亮网络营销策划 编辑:程序博客网 时间:2024/06/11 09:42

当我们在多个视图页面中用到同一段动态的代码块时,我们就有必要用到thinkphp的widget扩展。

widget就相当于在页面中调用一个专属widget的控制器,并将它关联的视图植入当前的页面中,所以,widget的视图内容要按照当前页面的情况来考虑。

先来举个例子吧

需求:写一个供页面使用的主题widget,及多个页面要从数据库中提取所有主题并以列表的模式罗列在页面中,实现以主题筛选的功能。

应用页面:

<!-- 主题 -->            <dt class="filter_cat">主题:</dt>                {:W('Common/Subject/index')}             </dl>
这就是widget的应用方式,有参数的形式为

{:W('Common/Subject/index',array('id'=>$id)}
所以他就相当于访问subject控制器里的index方法,但是他的定义与控制器有所不同

定义widget的控制器,在与controller文件夹同路径下的widget文件夹中定义一个文件

SubjectWidget.class.php

<span style="font-size:18px;"><?phpnamespace Common\Widget;use Think\Controller;class SubjectWidget extends Controller {    public function index($language_id=1){        //主题        $subject_lists = get_result(D('Common/CategoryView'),array('status'=>1,'type'=>'subject','language_id'=>$language_id));            $this->assign('subject_lists',$subject_lists);        $this->display(T('Common@Widget/Subject/index'));    }}</span>

index.html

            <?php                $options_arr=array_merge(I('get.'),array('subject'=>''));                $href=U('',$options_arr);                                     ?>                <dd class="filter_con">                    <ul>                        <li class="item" ><a <?php if(!I('get.subject')){ ?>class="cur"<?php } ?> href="<?=$href?>">  全部</a></li>                    <?php                        $options_arr=I('get.');                        unset($options_arr['subject']);                        foreach ($subject_lists as $val) {                             $options_arr=array_merge(I('get.'),array('subject'=>$val['description_id']));                            $href=U('',$options_arr);                    ?>                        <li class="item" ><a <?php if(I('get.subject')==$val['description_id']){ ?>class="cur"<?php } ?> href="<?=$href?>"><?=$val['title']?></a></li>                    <?php } ?>                </dd>
如上所示,这就是正真显示在主页面的东西,并且该页面的所有类都是主页面上定义或引用的,如果在里面写相对的url如U('')表示的是主界面所属的当前控制器下的当前方法,并非是widget的控制器或方法,所以,从这可以看出widget是完全服务于调用界面的

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果手机开不了机怎么办 苹果6s无限重启怎么办 苹果6s一直白屏怎么办 苹果6白屏了怎么办 苹果6s听筒掉漆怎么办 苹果6splus跳屏怎么办 蘑菇街发货好慢怎么办 买手机不给开票怎么办 泰迪狗皮肤病怎么办 狗狗皮肤病严重怎么办? 钢梁高厚比超限怎么办 手机壳按键难按怎么办 层间位移角超限怎么办 淘宝店排名靠后怎么办 如果地震了你会怎么办 地震来了怎么办60字 如果迷路了你会怎么办 吃多了抽烟想吐怎么办 晚上牙疼得要命怎么办 楼梯被火封锁后怎么办 牙齿疼怎么办能快速不疼 我被短信轰炸了怎么办 火警响了在家该怎么办 痔疮肉球变大了怎么办 痔疮长了好几个怎么办 苹果7手机丢了怎么办 如果油锅着火了怎么办 家里电气著火了怎么办 你家油锅起火了怎么办 交通事故后对方不肯去处理怎么办 租的车出了事故怎么办 借的车出了事故怎么办 台风来了怎么办小知识 台中班台风来了怎么办 地震时在五楼怎么办 小事故对方不来怎么办 发生交通事故对方不处理怎么办 当地震来了该怎么办 地震来了该怎么办教案 地震来了怎么办的问题 住30楼的地震了怎么办