内 容 | 一. Smarty模板 1.1为什么要使用Smarty及如何使用Smarty 1.2 模板中可以使用的变量类型及变量来源 1.3 内置函数 1.4 模板中使用的变量调节器与组合修改器与机配置文件 1.5 Smarty模板中最重要的缓存机制 二. FCK编辑器的使用
一. Smarty模板 1.1为什么要使用Smarty及如何使用Smarty 1.为什么要使用模板引擎: 做项目的时候:学习了PHP和HTML相分离的模板技术: 将来在公司做真实项目的时候,通常都是PHP程序员和美工分工协作的 项目大概划分成: 负责显示的HTML代码 负责业务逻辑的PHP代码(显示哪些数据、怎么显示) 模板引擎,就是将PHP处理的数据 和 HTML代码显示整合一起,这么一个技术 2. 如何使用? (1) 从官网下载smarty 类库 www.smarty.net (2) 解压这个包:我们需要的是libs这个目录,将这个目录放到我们的项目根目录中 通常情况下,我们需要将这个libs目录重命名为 smarty (3) 接下来就是使用这个类 1. 加载这个类,实例化对象 var 是 PHP 4之前的声明属性的关键字,PHP 5 之后,采用 $声明变量,PHP5 兼容 4之前
2. PHP获得的数据,显示到模板中,那么找到这个模板,通过smarty对象的 template_dir 属性来找到,默认情况下是在项目的templates目录中
3. 将PHP代码和HTML代码整合好之后,编译文件(放到哪里)---->compile_dir属性设置 4. 开始从PHP文件给HTML文件分配变量 5.显示(在模板文件中,怎么显示内容呢?) 模板标签: 在模板中如何使用 PHP分配的变量呢? {变量名}
1.2 模板中可以使用的变量类型及变量来源 1. 可以使用的数据类型 (1)分配变量数据(一个值) (2)数组(必须是关联数组)
模板文件中,如何使用数组
(3)分配对象
在模板文件中,如何访问对象的属性和方法呢? 通过 -> 来访问 对象的属性和方法 注意:在模板文件中访问对象的属性和方法的时候,也是受 权限控制的 2. 变量来源 可以通过php 文件来分配变量 $smarty=new Smarty(); $smarty->left_delimiter='<{'; //修改Smarty类中的定界符设置 $smarty->right_delimiter='}>'; $smarty -> config_dir = 'configs';//修改smarty 类中的配置文件设置 $smarty->assign('all',$all);//分配变量 $smarty->display('goods_list.htm');//调用方法 注意:css的语法 和 smarty的标签,发生冲突,可以通过修改smarty文件变量或使用smarty的内置函数 {literal}...{/literal} 1.3 内置函数 1.{literal}...{/literal} //标签区域内的数据将被当作文本处理,此时模板将忽略其内部的所有字符信息 2. 通过smarty内置的标签,可以获得 url地址上传递的参数,form表单提交的内容,session,cookie,env,server....当前的时间戳
3. Foreach(foreach from=$待循环的数组 item=”将循环的元素值赋给谁” key=”将循环数组的下标赋给谁”) // key循环的案例 key = ‘k’ 这个用法,只适用于索引数组,如果这个数组是一个关联数组的话,就不能获得下标的数字值了 Key 值的循环是从0开始的
那么,第二种方法: (2)iteration ----- 获得当前循环的次数,默认从1开始,每循环一次加1
iteration 总是从 1 开始,每执行一次增加 4. include 此标签用于引入其他模板:
需求:有些网站的底部有 版权所有、备案信息等等 我们就可以封装到一个公用的文件中,其他文件需要的时候加载即可
5. config_load 加载配置文件
table_color.conf
6. Function_exists();判断函数是否被定义 isset() 判断变量是否被定义
1.4 模板中使用的变量调节器与组合修改器与内建函数机配置文件 1. 变量调节器 变量调节器,是调节一个变量该怎么显示,而不是修改这个变量的值 。如下例 (1) 我们将时间戳按照我们要求的时间格式去显示 语法格式: {变量名|变量调机器名称:参数列表} <{$smarty.now|date_format:"%Y-%m-%d %H:%i:%s"}>分钟 和 秒和PHP中的格式有一定的区别 <{$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"}> smarty 中才能正常显示 (2) 假如,将查询的字符串 统一转换成大小写 <{$str|upper}><br/> <{$str|lower}>
(3) 字符串缩进 <{$str|indent:"2":" "}> Indent( number ‘缩进几个字符’,str ‘用什么来代替’) (4) 换行输出 nl2br()所有的换行符将被替换成 <br />.功能同PHP中的nl2br()函数一样.
(5) 字符转码:url编码 html实体转码:
超链接传递数据的时候,默认是明文传递的 通常要给他url编码一下
(6) 如何将保存数据的html标签,去除掉,使用smarty的内置的变量调机器(strip_tags)
utf8_truncate: ‘36’: ‘**’ //是自定义变量是 smarty/plugins/modifier.truncate.php 1.5 Smarty模板中最重要的缓存机制 1. 缓存文件 $smarty -> config_dir = 'configs'; //设置配置文间的地址 $smarty->cache_dir='cache';//设置缓存文件地址 $smarty->caching=1; //开启缓存 if(!$smarty->is_cached('goods_list.tpl')){ echo 'run...'; include 'db.class.php'; $db= new db('localhost','ecshop','root',''); $sql='select * from ecs_goods'; $all=$db->getAll($sql);} is_cache() 判断是否有缓存文件存在 2.单模板多缓存: 可不可以根据,根据传递的参数,来获得不同的缓存文件,可以解决: 通常传递一个能够标识这个记录的一个标志,通常是id,称之为缓存id,会自动的生成一个相对的缓存文件:
同样,既然生成缓存的时候,会根据id值来生成,那么判断的时候,也应该根据传递进来的缓存id来判断:详细过程如下
单模板多缓存就是:一个模板,根据传递的id值不同,生成不同的缓存文件(多个缓存文件)
3. 局部不缓存: 在整体被缓存了,但是某个地方不需要缓存 如果上面讲的是提高查询的速度,那么局部不缓存就是和他相反的 例如,假如做一个股票网站、购物商场的的话,价格肯定不能缓存 案例: (1)在缓存文件中,显示实时的时间:
步骤: (2) 局部不缓存通过 smarty的内置函数:insert:特点:insert 函数不会被缓存,每次调用这个模板的时候,都会重新执行这个函数
这样,每次调用模板的时候,都会执行这个insert内建函数:name属性指的是,将要调用的函数名,然后,外面的函数再给insert 返回实时的内容即可 注意: 定义这个外面的函数的时候,不能随便定义,有一定的规范:以insert_开头 而且,函数应该在php文件中定义:
4. 缓存时间 缓存确实重要,但是优缺点:导致数据的延迟 即使修改了数据源,真实的数据不会显示
解决方法: 1. 当数据源发生变化的时候,手动的去更新一下缓存,这种情况适合于(更新频率比较低的,但是要求数据比较精确的)例如,身份证的挂失 2. 给缓存的内容(缓存文件)设置一个有效期, 在这个有效期内,我们认为缓存有效,超过这个有效期了,我们就认为缓存无效,自动删除缓存文件 解决方法 : 我们的smarty支持第二中形式的缓存时间 的设置:
我们可以在php 文件中设置缓存时间
二. FCK编辑器 1. 加载fck 类,实例化对象, 2. 设置属性, 3. 调用方法 |
学习总结: 一、Smarty的使用: Goods_list.php <?php include 'db.class.php'; $db = new db('localhost','shop_test','root',''); $sql = "select goods_name,shop_price,goods_number,cat_id from ecs_goods"; $all = $db -> getAll($sql); require 'smarty/Smarty.class.php'; $smarty = new Smarty(); $smarty -> left_delimiter = '<{'; $smarty -> right_delimiter = '}>'; $smarty -> config_dir = 'conf'; $smarty -> template_dir = 'tpls'; $smarty -> compile_dir = 'tpls_c'; $smarty -> assign('list',$all); $smarty -> display('goods_list.htm');
Goods_list.htm <style> {literal} td{text-align:center} {/literal} </style> <{config_load file='table_color.conf'}> <table width='500px' bgcolor='<{#table_bgcolor#}>'> <tr> <th>商品名称</th> <th>商品价格</th> <th>商品数量</th> <th>商品分类</th> </tr> <{foreach from=$list item='value'}> <tr> <td><{$value.goods_name}></td> <td><{$value.shop_price}></td> <td><{$value.goods_number}></td> <td><{$value.cat_id}></td> </tr> <{/foreach}> </table> {literal} <script> function clickme(){ alert('hello smarty'); } </script> {/literal} <button οnclick="clickme()">点击我</button> <img src='<{#img_path#}>1.gif'/> <{include file='footer.htm'}>
二、fck的使用 <?php include_once"fckeditor/fckeditor.php"; $fck=new FCKeditor('goods_desc'); $fck->BasePath= './fckeditor/' ; $fck->Width="450px"; $fck->Height="200px"; $fck->ToolbarSet="myFck"; $fck->Create(); |