深入Thinkphp3.2框架遇到很多小问题 果然在学习语法知识的过程中 做项目是最好的检验成果
问题:
MVC:
M:Model模型、V:View视图、C:Controller控制器
View视图:存放模板文件.html,结合html+css+jquery等将完整的页面在Controller中通过$this->display()渲染出来
Controller控制器:控制器可以将View AJAX传递过来的数据 再次传递给Model层。通过D方法等
Model模型:接收Controller传递过来的数据 进行访问数据库 增删改查 并对接收的数据进行服务器端的自动验证和自动完成等操作
submit
<input type="submit"> //点击按钮表单自动跳转
<input type="button"> //点击按钮 不会跳转 类似虚构的submit 只是不会提交
a标签
<a href="#"></a> //#默认#Top 点击滚动条会自动返回顶部
<a href="javascript:void(0)"></a> //不会返回顶部
模板文件中使用循环、条件等语句
Controller层:
$list['data'] = 0;
$this->assign('list',$list);
View层:
<switch name="list"> //注意此处name值没有$
<case value="$list['data']">
<p>$list['data']<p>
</case>
<default />
<h1>$list['data']<h1>
</switch>
模板变量和系统变量常量
*a. //可以在Config中设置模块替换变量*
'TMPL_PARSE_STRING' => array(
'__CSS__' => __ROOT__.'/Public/'.MODULE_NAME.'/css',
'__JS__' => __ROOT__.'/Public/'.MODULE_NAME.'/js',
'__IMG__' => __ROOT__.'/Public/'.MODULE_NAME.'/img',
),
View中即可直接使用__JS__、__IMG__、__CSS__
*b. 在View中也可以使用(模板)系统常量
网站使用Think.const 输出Think.server.script_name}和{Think.SERVER.script_name}等效
c. 在View中也可以使用(模板)系统变量
{$Think.server.script_name} // 输出$_SERVER变量
{$Think.session.session_id|md5} // 输出$_SESSION变量
{$Think.get.pageNumber} // 输出$_GET变量
{$Think.cookie.name} // 输出$_COOKIE变量
注意一:Action中使用的系统常量不可以直接在模板文件中使用
比如:
Action中:MODULE_NAME //输出模型名称
模板中:{:MODULE_NAME}
注意二:在JS文件中直接使用thinkphp的常量是不被解析替换的,所以要先在模板文件的元素中对thinkphp的常量进行定义
比如:
模板文件:
<script type="text/javascript">
var app="__APP__";
</script>
<script src="__PUBLIC__/Js/test.js"></script>
test.JS文件:
$(function(){
alert(__APP__);
});
CSS文件中和JS文件中引用IMAGE图片
Public目录中含有CSS、JS、IMG目录
如果在CSS文件中引用IMG图片:
background:url("../IMG/image.png");
如果在JS文件中引用IMG图片:
不可以直接使用../,只能通过调用模板替换变量等方式获取路径
$('#image').attr('src',__Public__/IMG/image.png);
Crop裁剪方法的BUG
```
$image = new Image();
$image->open($url);
*$image->crop($w,$h,$x,$y)->save($url);*
$image->thumb(200,200)->save($bigPath);
在FileModel的crop方法中我使用该代码,一直提示File控制器/crop方法404错误,后来才知道在tp框架中crop方法与thumb方法结合(其它方法未知),会导致这样的错误发生,因此解决方法,将crop方法与Open连缀调用,如下:
$image->open($url)->crop($w,$h,$x,$y)->save($url);
Volist/empty等标签name属性 (BUG)
$list = array("a"=>"hello","b"=>"world");
$this->assign('list',$list);
<volist name="list">
{$list['a']}
</volist>
注意:不论传递过来的是对象还是数组,在这些标签中name属性没有$
模板中使用U函数并且get传递参数
当我想点击某段文字,跳转到另外一个页面时候
<a href="{:U('Space/index/id/{$id}')}">点击跳转space页面</a>
此时不能在U函数里面get传递参数id,解决方法如下:
<a href="{:U('Space/index',array('id'=>$id))}">点击跳转space页面</a>