姓名 |
王子杰 |
周次 |
11 |
方向 |
php |
内 容 |
本周学习知识点:ThinkPHP模板引擎,php序列化、数据缓存、静态缓存 |
||||
本周学习收获: 做了小的复习,因在过渡期,所以收获不大 |
|||||
学习总结: Config配置详解 ·项目中 模板定界符需要修改,原因是调用jQuery会产生冲突 ,方法 config中 修改 TMPL_L_DELIM =》 ‘《{’右边同理 ·数据库在config中的配置可以启用DSN ,‘DB_DSN’=》‘mysql://root:root@localhost:3306/db_name’DB_DSN为数据库的首先参考参数,要注意定义表前缀,不定义表前缀会在调用它库时出现数据表名的冲突,定义如下: ‘DB_PREFIX’=>’tp_’ ·M()等同于new model(),参数需要首字母大写,D()包含M方法的所有方法,唯一不同的是会在调用表之前去判断应用模块中是否包含自定义的数据模型; ·开始编程项目时注意在入口文件中定义开启调试模式:define(‘APP_DEBUG’,true); ·开启pagetrace 会让调试变得更加esay ‘SHOW_PAGE_TRACE’=> true; 注意页面调试界面只有在调用 display()方法的时候才会显示,我们可以根据里面的sql调试来查看我的sql语句 ·还有一些不常用的config设置:修改模板的后缀 ‘TMPL_TEMPLATE_SUFFIX’=>’.tpl’、修改模板文件的目录层次 ‘TMPL_FILE_DEPR’=>’_’、修改模板主题 ‘DEFAULT_THEME’=》‘my’ 自动侦测模板主题 ‘TMPL_DETECT_THEME’=》true 设置支持的模板主题列表 ‘THEME_LIST’=》‘my,your’我们在url中添加参数t值为主题名来选择主题就可以了~ 路径详解 ·tp中的四种路径方式:pathInfo、普通路径、rewrite方式(为了SEO省略入口文件:具体为 修改Apache配置文件将rewrite可用,放一个配置文件到根目录重启服务器即可)、兼容方式 入口文件?S=模块名/动作名/键/值 模板中详解 ·在模板中的调试,查看引用路径可以查看浏览器的页面源代码,查看变量使用差错可以在 rutime中的cache查看相应的缓存文件~ ·display()要显示其他模块下的界面需要添加参数 如我是Goods模块现在要显示User模块下的test.html 就可以用 $this -> display(‘User:test’) ·$this ->show()显示一个字符串,可以识别html标签的字符串,我们可以用fetch方法将模板文件编程字符串再来用show方法显示出来 ·模板中加载js css方法,传统方法调用__PUBLIC__常量;配置模板语法 在config中配置’TMPL_PARSE_STRING’=>array(‘__Css__’=>’css的文件夹路径’) ·ie不识别margin 我们只需要在模板的头上加入一段 dtd 头解释就可以了 ·模板中支持标量输出,数组输出,对象输出,在模板里可直接调用数组下的值和对象的属性,例如: Class test{public $name=’asd’;} $obj = new test; $this -> assign(‘obj’,$obj); $this -> display(); 模板端: <{$obj.name}> 显示: Asd ·在系统中使用函数输出{$name|md5} {$name|strtoupper} 再来一个时间处理的函数输出方法: $time=time(); $this -> assign(‘time’,$time); $this -> display(); 模板端: {$time|date(‘Y-m-d H:i:s’,###)}注释:###为占位符 ·{$name|default=’这里是默认值~’} ·在模板端还可以使用运算符 模板中的语法: ·在模板中导入文件方法 1 导入js css文件 传统方法 import <import type=’js’ file=’Js/test’/>//默认路径为__PUBLIC__ Load <load href=’path~~’/> ·分支结构 If else <if condition=’$name eq “wangzijie”’> Heihei <else/> Haha </if> If elseif else <if condition=’$name eq “jye”’> Asd <elseif condition=’$name eq “haha”’> Qwe <else/> </if> Switch case <switch name=’number’> <case value=’1’> 111 <case value=’2’> 222 </switch> ·循环结构 for <for start=’0’ end=’10’name=’j’>//name默认是i <tr><td>{$j}</td></tr> </for> 设置comparison比较关系 <for start=’10’ end=’0’ step=’-2’ comparison=’gt’> <tr><td>{$i}</td></tr> </for> Volist <volist name=’list’ id=’vo’ offset=’1’ length=’3’> {$vo.name} </volist> Foreach <foreache name=’list’ item=’vo’ key=’k’> {$k}----{$vo} </foreach> ·特殊标签 <eq name=’n’ value=’10’> En <else/> No </eq> <in name=’number’ value=’9,20,33,55’> Zai <else/> Buzai </in> <between name=’number’ value=’1,9’> Zai <else/> No </between> 同notin notbetween //判断某个字段是否赋值 <present name=’Think.seesion.username’> You <else/> No </present> 同判断是否为空值<empty name=’number’> 是否定义<defined> 定义<define> 赋值<assign> ·在模板中使用PHP代码 <php>echo ‘haha’;</php> 模板中的使用技巧(项目必备) ·包含文件<include file=’Public:header’/>//插入一个公用的头文件代码 ·在Tpl下创建layout.html <body>asd {__CONTENT__} Asdasd </body> Index.html <layout name=’layout’/> <p>haha</p> 项目优化技巧 ·容错机制 空模块容错 创建一个 EmptyAction.class.php Public function index(){ $this -> error(‘模块不存在’); } 空动作容错 在CommonAction.class.php Public function _empty(){ $this ->error(‘方法不存在’); 或者 $name=MODULE_NAME; $this -> display(‘City:$name’); } 然后可以用其他模块继承 ·判断用户登录权限 在CommonAction.class.php Public function __initialize(){ If(!Isset($_SESSION[‘username’])){ $this -> error(‘请登录后再执行操作’); } } 然后让需要权限验证的动作方法继承一下common类 ·前置后置操作,个人感觉没什么大用~ Public function _before_操作名(){} Public function _after_操作名(){} CURD详解 ·所谓CURD 即 create update read delete ·add方法每次的返回值是一个整型值为新增主键值的数字 Delete和save方法返回的是整型值为影响行数的数字 我们可以根据这些返回值去判断进行下一步的操作 ·查询语句:建议用where方法查询的时候必须使用数组作为条件,数组条件默认逻辑为and 如果需要调改 条件逻辑把条件数组$data[‘_logic’]=‘or’就可以了~进行搜索建议只需要把条件数组字段加一个array即可入$data[‘name’]=array(‘like’,’%jye%’)这个我还没有尝试,一会儿要试一试,剩下的就是区间的限制 有gt eq between等 注意 notlike 没有空格 not between之间有空格 同in。还有一个统计查询 就是count方法 sum方法avg方法 min方法等 。同样我们可以使用sql语句直接查询 用query方法读取查询(成功后返回一个数组结构)、用execute方法进行更新增加操作(成功后返回影响行数) ·连贯操作:所谓连贯操作就是在核心core文件夹中的model.class.php定义的连贯操作方法进行复制后返回一个 $this 。也就是说使用了连贯操作方法后不仅进行了赋值查询还返回本身可以进行下一个操作; ·如果我们需要获取除了id以外的所有字段显示到模板 我们可以通过 field方法设置,设置方法如下:field(‘id’,true),这个方法很有用,比如我们在模板显示内容的时候必须剔除id字段,就可以使用这个快捷操作~~ 系统常量 ·__PUBLIC__不是系统常量是一个模板端才可以识别的常量 这是不同于__ACTION__ __ROOT__ __URL__ __GROUP__ 等的 系统变量 ·常用的有 {$Think.session.id} {$Think.get.id} {$Think.post.id}//调用超全局数组变量 {$Think.time}//调用系统时间 {$Think.const.APP_NAME}//调用系统常量 扩展类的使用 ·验证码 这里还需要再看项目展示视频,了解如何使用多个验证码 Import(‘ORG.Util.Image’); Image::buildImageVeryfy(长度,字符串类型,图片类型,宽度,高度,别名); 注意buildImageVerify方法不支持输出中文验证码 如果有需要搞定中文验证码需要调用 Image::DBVerify(); 注意要把相关的字体文件(在c://windos/font)放入Image.class.php统计文件夹下 在模板<img src=’’ onclick=’this.src=this.src+”?”+Math.random()/> ·文件上传 文件上传是 在form 属性需要添加 enctyoe=’multipart/form-data’ 在function中 Import(‘ORG.Net.UploadFile’); $upload = new UploadFile; $upload -> maxSize=2000; $upload -> allowExts=array(‘jpg’,’png’,’gif’); $upload ->savePath = ‘./Public/Uploads/’; If(!$upload->upload()){ $this->error($upload->getErrorMsg()); }else{ $info = $upload -> getUploadFileInfo(); } $user -> photo = $info[0][‘savename’]; #user->add(); ·分页 Import(‘ORG.Util.Page’); $count = $message -> count(); $page = new Page($count,2); $page -> setConfig(‘header’,’条信息’); $show = $page ->show(); $arr = $message -> relation(true)->limit($page->firstRow.’,’.$page->listRows)->select(); $this -> assign(‘show’,$show); $this -> assign(‘arr’,$arr); 模板端 <{$show}> 控制器 ·重定向 $this -> redirect(‘User/index’); $this -> redirect(‘/dd/dd/’,5,’跳转’); 地址 等待时间 提示语 URL ·普通模式这个就不说了~!~ ·pathinfo这个也不用说了吧 ·重写rewrite 在服务器配置修改加载 rewrite模块 然后加载一个超文本入口文件 重启服务器就哦了 ·兼容,为了搞定一些sb浏览器的不兼容性 就是多一个s= 前面是文件路径 后面是参数 ·不区分大小写 Config.php中‘URL_CASE_INSENSITIVE’=》true ·伪静态 ‘URL_HTML_SUFFIX’=>’html|pdf’ URL路由 这个也需要研究一下 不晓得怎么用,感觉没什么用,也感觉是自己无知才感觉没有,我有罪! 多应用配置技巧:(个人建议项目使用多应用~便于移植哦亲~当然分组方法更具整体性~可以看自己的习惯咯~~) 在更目录下创建 config.php 在每个应用的config.php中 $arr= include ‘./config.php’; $arr2=array(); Return array_merge($arr,$arr2); 分组方法 在config.php中 ‘APP_GROUP_LIST’=>‘Home,Admin’, ‘DEFAULT_GROUP’=>’Home’ 页面跳转 默认的跳转文件在 ThinkPHP/TPL/dispatch_jump.tpl 注意跳转界面的时候 success 或者 error 的跳转地址都需要用U方法 Ajax操作 在模块操作方法中 Function getAjax(){ $this -> returnAjax(‘这里是我要的数据!’,’信息1’,1); } 则 获取的数据json格式的内容 data:’这里是我要的数据’ info:’信息1’ status:1 具体项目中 文件上传是 在form 属性需要添加 enctyoe=’multipart/form-data’ ·多语言支持 在config统计目录下创建tags.php进行如下配置 ‘app_begin’=>array(‘checkLang’), 在config文件里进行配置, ’LANG_SWITCH_ON’=>true,//开启语言切换 ‘LANG_LIST’=>’zh-cn,zh-tw,en-us’,//设置语言支持列表 ‘LANG_AUTO_DETECT’=>true,//开启语言自动侦测 ‘DEFUALT_LANG’=>’zh-cn’,//设置默认语言 在项目文件的lang文件夹下创建文件重命名为语言名,在语言名文件夹下创建模板标签配置文件,重命名为模板名。 ·ThinkPHP中防sql注入 Php自带方法 1,在php.ini中开启魔术引号 查找magic_quotes_gpc设置为On,效果为自动转移post get cookie变量 2,使用addslashes或mysql_escape_string函数方法为传递过来的变量转义后再使用sql语句 ThingkPHP自制方法 1,$this->_post(‘变量名’,’addslashes’)或者 $this->_post(‘变量名’,’mysql_escape_string’) 2,使用连贯操作where方法参数设置为数组,tp框架会自动转移条件数组中的变量、 序列化 ·调用serialize方法将任何数据转化成有序的字符串,用来使用时将其调回并调用unserialize方法将其转化成原类型。 静态缓存 ·在配置文件中开启静态缓存 HTML_CACHE_ON => TRUE HTML_CACHE_RULES=>ARRAY( ‘模块:动作’=>array(‘缓存文件名’,缓存时间) ) ·全局缓存用* ·单页面多缓存用传id方式 ·局部不缓存通过js实现 数据缓存: ·$cache = Cache::getInstance(‘File’); $cache->set(‘缓存名’,’缓存值’,存在周期); $cache->get(‘缓存名’); $cache->rm(‘缓存名’); |
|||||
对授课教师意见建议: 无 |