ThinkPHP3.2.2 Widget扩展以及widget demo实例
2015-01-14 13:18
501 查看
Widget扩展一般用于页面组件的扩展。
先说明Widget被调用的方法,你只需要在你的模板文件中使用这样的语法:{:W("Demo/demo_widget_method",array(5,'thinkphp'))}
系统就会自动去寻找对应的Widget类文件并执行对应的方法。
具体步骤如下:
1.因为是直接在模板中写的{:W("Demo/demo_widget_method",array(5,'thinkphp'))},所以要了解后面的步骤,我们得移步系统的Template.class.php并看到了如下的东东
就在判断“:”的地方判断了模板中存在Widget的调用,经过方法前面的解析后的$name=W("Demo/demo_widget_method",array(5,'thinkphp'))
2.然后系统触发W()方法,此方法在系统目录下的Common/Functions.php中定义。
3.然后移步W()方法,几经周转,系统最后触发了DemoWidget.class.php的demo_widget_method方法并传递了id和name这两个参数
4.完毕
下面把上面的demo贴出
首先:(目录结构贴出如下)
IndexController.class.php的内容如下:
百看不如一练,不懂的就试试吧!
懂的话,恭喜你,我要像你学习!
有错误之处,还请见谅,欢迎指正哈~!
先说明Widget被调用的方法,你只需要在你的模板文件中使用这样的语法:{:W("Demo/demo_widget_method",array(5,'thinkphp'))}
系统就会自动去寻找对应的Widget类文件并执行对应的方法。
具体步骤如下:
1.因为是直接在模板中写的{:W("Demo/demo_widget_method",array(5,'thinkphp'))},所以要了解后面的步骤,我们得移步系统的Template.class.php并看到了如下的东东
/** * 模板标签解析 * 格式: {TagName:args [|content] } * @access public * @param string $tagStr 标签内容 * @return string */ public function parseTag($tagStr){ if(is_array($tagStr)) $tagStr = $tagStr[2]; //if (MAGIC_QUOTES_GPC) { $tagStr = stripslashes($tagStr); //} //还原非模板标签 if(preg_match('/^[\s|\d]/is',$tagStr)) //过滤空格和数字打头的标签 return C('TMPL_L_DELIM') . $tagStr .C('TMPL_R_DELIM'); $flag = substr($tagStr,0,1); $flag2 = substr($tagStr,1,1); $name = substr($tagStr,1); if('$' == $flag && '.' != $flag2 && '(' != $flag2){ //解析模板变量 格式 {$varName} return $this->parseVar($name); }elseif('-' == $flag || '+'== $flag){ // 输出计算 return '<?php echo '.$flag.$name.';?>'; }elseif(':' == $flag){ // 输出某个函数的结果 return '<?php echo '.$name.';?>'; }elseif('~' == $flag){ // 执行某个函数 return '<?php '.$name.';?>'; }elseif(substr($tagStr,0,2)=='//' || (substr($tagStr,0,2)=='/*' && substr(rtrim($tagStr),-2)=='*/')){ //注释标签 return ''; } // 未识别的标签直接返回 return C('TMPL_L_DELIM') . $tagStr .C('TMPL_R_DELIM'); }
就在判断“:”的地方判断了模板中存在Widget的调用,经过方法前面的解析后的$name=W("Demo/demo_widget_method",array(5,'thinkphp'))
2.然后系统触发W()方法,此方法在系统目录下的Common/Functions.php中定义。
3.然后移步W()方法,几经周转,系统最后触发了DemoWidget.class.php的demo_widget_method方法并传递了id和name这两个参数
4.完毕
下面把上面的demo贴出
首先:(目录结构贴出如下)
IndexController.class.php的内容如下:
<?php namespace Home\Controller; use Think\Controller; class IndexController extends Controller { public function index(){ $this->display(); } }Index控制器下的index方法的对应模板如下:
<html> <head> <title>IndexController>Index</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <h2>IndexController>Index</h2> {:W("Demo/demo_widget_method",array(5,'thinkphp'))} </body> </html>DemoWidget.class.php的内容如下:
<?php namespace Home\Widget; use Think\Controller; class DemoWidget extends Controller{ public function demo_widget_method($id,$name){ $this->assign('id',$id); $this->assign("name",$name); $this->display("Demo:demo_widget_method"); } }View/Demo/demo_widget_method.html模板内容如下:
<h2>It is be show by DemoWidget/demo_widget_method</h2> <h2 style="color:red;">Id:{$id}</h2> <h2 style="color:red;">Name:{$name}</h2>
百看不如一练,不懂的就试试吧!
懂的话,恭喜你,我要像你学习!
有错误之处,还请见谅,欢迎指正哈~!
相关文章推荐
- Thinkphp3.2.2 行为扩展及demo实例
- thinkPHP下的widget扩展用法实例分析
- ThinkPHP的Widget扩展实例
- thinkPHP下的widget扩展用法实例分析
- ThinkPHP的Widget扩展实例
- thinkPHP3.2.2框架行为扩展及demo示例
- thinkphp行为扩展以及插件机制介绍!
- 实例展示elasticsearch集群生态,分片以及水平扩展.
- ThinkPHP行为扩展Behavior应用实例详解
- ThinkPHP微信demo实例
- 7-ng-repeat指令实例以及扩展部分
- thinkphp下widget扩展的使用
- Log4j 日志工具demo以及配置文件实例
- 桌面组件Appwidget的应用实例以及导入第三方jar包的问题解决
- 实例展示elasticsearch集群生态,分片以及水平扩展.
- [thinkphp3.2]行为扩展以及插件机制介绍!
- Log4j 日志工具demo以及配置文件实例
- MyEclipse8.6以及Intellij IDEA运行CMU Sphinx中Helloworld DEMO实例
- Windows下的shell扩展的种类以及相关的实例
- thinkphp3.2.2如果php启动了apc扩展则报错