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

当我们在多个视图页面中用到同一段动态的代码块时,我们就有必要用到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;"><?php
namespace 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('[email protected]/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是完全服务于调用界面的

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

时间: 2024-12-04 14:39:14

thinkPHP下的widget挂件原理与使用方法的相关文章

ThinkPHP下使用Ueditor

在做课程设计的时候想到用百度的Ueditor,可在配置的时候出现了一些问题 Ueditor感觉不是很难,以前有个人定制的,现在取消了这项服务,但是我们可以自己进行配置 下载地址:http://ueditor.baidu.com/website/download.html#ueditor 下载好文件后,把文件解压,把文件里的所有文件放到项目下的Public文件下, 因为我们在很多地方都需要使用编辑器,所以放在Public下方便使用 在<head>--</head>下添加如下代码 ?

ThinkPHP下实现验证码的调用

产生验证码的类位于ThinkPHP/Extend/Library/ORG/Util/Image.class.php文件中. 验证码函数参数解释: length:验证码的长度,默认为4位数 model:验证字符串的类型,默认为数字,其他支持类型有0 字母 1 数字 2 大写字母 3 小写字母 4中文 5混合 type:验证码的图片类型,默认为png width:验证码的宽度,默认会自动根据验证码长度自动计算 height:验证码的高度,默认为22 verifyName:验证码的SESSION记录名

PHP中的&amp;传值引用的问题,在foreach循环的结果能帮解释下输出的结果原理是什么?

PHP中的&传值引用的问题,在foreach循环的结果能帮解释下输出的结果原理是什么? 代码如下: <?php $arr = array('one','two','three'); foreach ($arr as &$value){ echo 'Value:'.$value.'<br />'; } foreach ($arr as $value){ echo 'Value:'.$value.'<br />'; } ?>输出结果: Value:one V

(转)linux下文件删除的原理精华讲解(考试题答案系列)

linux下文件删除的原理精华讲解(考试题答案系列) 说明:本文为老男孩linux培训某节课前考试试题及答案分享博文内容的一部分,也是独立成题的,你可以点下面地址查看全部的内容信息.http://oldboy.blog.51cto.com/2561410/791245 5.描述linux下文件删除的原理(记时3分钟)<?xml:namespace prefix="o"> ?xml:namespace> Linux文件删除原理:     Linux是通过link的数量来

增加PDF文件对比度的粗浅原理,及方法

  上边这张照片不是异形,而是著名的鹦鹉螺.下边这张照片,是送给研究生同学的毕业纪念,向龙同学帮我激光雕刻的. 最近的照片在[http://www.douban.com/photos/album/134230762/]. 电子书扫描版跟照片差不多,一个可能的问题是看起来乌突突的,黑的不够黑,白的不够白,像是蒙了一层雾.用picasa的luck功能或者snapseed的automatic功能,都能把图片上的雾去掉.但是同样的功能用在PDF上的软件我没有找到. 但是如果弄懂了原理--让我想起 倚天屠

使IE6下PNG背景透明的七种方法任你选

原文地址:http://blog.csdn.net/mosliang/article/details/6760028 相信如何解决png在ie6下透明的问题困扰了很多人.为了追求更好的页面效果,很多人喜欢使用png格式的图片,恰恰因为ie6下png图片的透 明问题,很多人不得不退而求其次地改用gif格式的图片.今天就来介绍一个ie6下png透明的解决办法,支持background(含 position.repeat.img src). 1. DD_belatedPNG简介: DD_belated

mydumper备份原理和使用方法

mydumper介绍 MySQL自身的mysqldump工具支持单线程工作,依次一个个导出多个表,没有一个并行的机,这就使得它无法迅速的备份数据. mydumper作为一个实用工具,能够良好支持多线程工作,可以并行的多线程的从表中读入数据并同时写到不同的文件里,这使得它在处理速度方面快于传统的mysqldump.其特征之一是在处理过程中需要对列表加以锁定,因此如果我们需要在工作时段执行备份工作,那么会引起DML阻塞.但一般现在的MySQL都有主从,备份也大部分在从上进行,所以锁的问题可以不用考虑

ThinkPHP中使用ajax接收json数据的方法

本文实例讲述了ThinkPHP中使用ajax接收json数据的方法.分享给大家供大家参考.具体分析如下: 这里通过ThinkPHP+jquery实现ajax,扩展了下,写了个查询,前台代码如下: 首先需要引入jquery.js,主要代码如下: 1 function ajax(id,pic){ 2 3 //由于ThinkPHP不解析JavaScript里的ThinkPHP常量,所以需要先在这里定义. 4 5 var URL='__URL__'; 6 7 $.ajax({ 8 9 url: URL+

Android检测Cursor泄漏的原理以及使用方法(转)

简介: 本文介绍如何在 Android 检测 Cursor 泄漏的原理以及使用方法,还指出几种常见的出错示例.有一些泄漏在代码中难以察觉,但程序长时间运行后必然会出现异常.同时该方法同样适合于其他需要检测资源泄露的情况. 最近发现某蔬菜手机连接程序在查询媒体存储(MediaProvider)数据库时出现严重 Cursor 泄漏现象,运行一段时间后会导致系统中所有使用到该数据库的程序无法使用.另外在工作中也常发现有些应用有 Cursor 泄漏现象,由于需要长时间运行才会出现异常,所以有的此类 bu