smarty模板基础
入口文件
<?php define("ROOT",str_replace("\\","/",dirname(__FILE__)).'/'); //常量ROOT中指定项目根目录 //echo str_replace("\\","/",dirname(__FILE__)).'/'; //获取当前文件所在的位置 require ROOT.'libs/Smarty.class.php'; //加载Smarty类文件 $smarty = new Smarty(); //实例化Smarty对象 define("CSS_PATH","/project/css/"); define("JS_PATH","/project/js/"); //$smarty -> auto_literal = false; //就可以让定界符号使用空格 $smarty->setTemplateDir(ROOT.'templates/'); //设置所有模板文件存放位置 //$smarty->addTemplateDir(ROOT.'templates2/'); //添加一个模板文件夹 $smarty->setCompileDir(ROOT.'templates_c/'); //设置编译过的模板存放的目录 $smarty->addPluginsDir(ROOT.'plugins/'); //设置为模板扩充插件存放目录 $smarty->setCacheDir(ROOT.'cache/'); //设置缓存文件存放目录 $smarty->setConfigDir(ROOT.'configs/'); //设置模板配置文件存放目录 $smarty->caching = false; //设置Smarty缓存开关功能 $smarty->cache_lifetime = 60*60*24; //设置缓存模板有效时间一天 <br>//下面的内容是修改左和右的分隔符形式 $smarty->left_delimiter = '<{'; //设置模板语言中的左结束符 $smarty->right_delimiter = '}>'; //设置模板语言中的右结束符 ?>
根据入口文件的配置把对应的文件放在对应的位置 ; 因为 下面 main 文件夹 里的PHP 文件 默认当前文件获取路径(__FILE__)所以 不用单独标明目录
基本目录如下图
smarty模板只要就是实现分离效果所以每个功能都需要两个页面一个是HTML 和 PHP 两部分组成
使用smarty模板要在main文件夹下面创建login.php文本,要用smarty模板首先引入入口文件,
1
2
3
4
5
|
<? php include("../init.inc.php"); //引入入口文件 //var_dump($smarty);// $smarty->display("login.html");//用来在模板显示用户看到的内容 |
登录页面在smarty模板里的templates文件夹下创建要在模板里显示的HTML类型登录页面login.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<! DOCTYPE html> < html > < head > < meta charset="UTF-8"> < title >登录页面</ title > </ head > < body > < hi >登录页面</ hi > < form action="logincl.php" method="post"> <!--form表单action要做的处理页面--> < div >用户名:< input type="text" name="uid" /></ div > < div >密码:< input type="password" name="pwd"/></ div > < input type="submit" value="登录" /> </ form > </ body > </ html > |
登录的处理页面
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<?php include ( "../DBDA.php" ); $db = new DBDA(); $uid = $_POST [ "uid" ]; $pwd = $_POST [ "pwd" ]; $sql = "select pwd from users where uid='{$uid}'" ; $mm = $db ->StrQuery( $sql ); //返回字符串 里面是查到的密码 if ( $mm == $pwd && ! empty ( $pwd )) //如果查到的密码等于用户给的并且用户给的不为空 { header( "location:main.php" ); //如果登录成功跳转到主页面 } ?> |
登录做完要做主页面要让主页面显示要查询数据库里的内容显示出来main.php
1
2
3
4
5
6
7
8
9
10
11
|
<?php include ( "../init.inc.php" ); include ( "../DBDA.php" ); $db = new DBDA(); $sql = "select * from nation" ; //找数据库里nation表里的所有数据 $arr = $db ->Query( $sql ); //返回二维数组 现在$arr里有查到的所有数据 $smarty ->assign( "shuju" , $arr ); //把查到的所有数据arr放到smarty模板里 $smarty ->display( "main.html" ); //调用display方法 显示模板文件 |
在做main.php的main.html页面
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
<! DOCTYPE html> < html > < head > < meta charset="UTF-8"> < title >主页面把main.php里的内容拿过来用</ title > </ head > < body > < h1 >主页面</ h1 > < table width="100%" border="1" cellpadding="0" cellspacing="0"> < tr > < td >代号</ td > < td >名称</ td > < td >操作</ td > < td >操作</ td > < td >操作</ td > </ tr > <{foreach $shuju as $v}> <!--$v代表遍历出来的小数组--> < tr > < td ><{$v[0]}></ td > <!--代号--> < td ><{$v[1]}></ td > <!--名称--> < td >< a href="shanchu.php?code=<{$v[0]}>">删除</ a ></ td > < td >< a href="xiugai.php?code=<{$v[0]}>">修改</ a > </ td > < td >< a href="tianjia.php?code=<{$v[0]}>">添加</ a ></ td > </ tr > <{/foreach}> </ table > </ body > </ html > |
在做修改xiugai.php
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<?php include ( "../init.inc.php" ); include ( "../DBDA.php" ); $db = new DBDA(); $code = $_GET [ "code" ]; //根据传过来的主键值 $sql = "select * from nation where code='{$code}'" ; $arr = $db ->Query( $sql ); $smarty ->assign( "nation" , $arr [0]); //取到民族 一维数组 $smarty ->display( "xiugai.html" ); //用display方法显示模板文件 ?> |
做xiugai.php的显示文件xiugai.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
<! DOCTYPE html> < html > < head > < meta charset="UTF-8"> < title >主页面把main.php里的内容拿过来用</ title > </ head > < body > < h1 >主页面</ h1 > < table width="100%" border="1" cellpadding="0" cellspacing="0"> < tr > < td >代号</ td > < td >名称</ td > < td >操作</ td > < td >操作</ td > < td >操作</ td > </ tr > <{foreach $shuju as $v}> <!--$v代表遍历出来的小数组--> < tr > < td ><{$v[0]}></ td > <!--代号--> < td ><{$v[1]}></ td > <!--名称--> < td >< a href="shanchu.php?code=<{$v[0]}>">删除</ a ></ td > < td >< a href="xiugai.php?code=<{$v[0]}>">修改</ a > </ td > < td >< a href="tianjia.php?code=<{$v[0]}>">添加</ a ></ td > </ tr > <{/foreach}> </ table > </ body > </ html > |
做分页
main.php里面加分页信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<?php include ( "../init.inc.php" ); include ( "../DBDA.php" ); $db = new DBDA(); //1.分也需要所有的数据总条数 $sall = "select count(*) from nation" ; $zts = $db ->StrQuery( $sall ); //方法执行会等于总条数 include ( "../page.class.php" ); //分页的类文件 $page = new page( $zts ,3); //2.每页显示3条 //分页里的成员变量$page->limit $sql = "select * from nation " . $page ->limit; //找数据库里nation表里的所有数据 $arr = $db ->Query( $sql ); //返回二维数组 现在$arr里有查到的所有数据 $smarty ->assign( "fenye" , $page ->fpage()); //分页信息注册到模板里 $smarty ->assign( "shuju" , $arr ); //把查到的所有数据arr放到smarty模板里 $smarty ->display( "main.html" ); //调用display方法 显示模板文件 |
main.html里显示分页
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
<!DOCTYPE html> <html> <head> <meta charset= "UTF-8" > <title>主页面把main.php里的内容拿过来用</title> </head> <body> <h1>主页面</h1> <table width= "100%" border= "1" cellpadding= "0" cellspacing= "0" > <tr> <td>代号</td> <td>名称</td> <td>操作</td> <td>操作</td> <td>操作</td> </tr> <{ foreach $shuju as $v }><!-- $v 代表遍历出来的小数组--> <tr> <td><{ $v [0]}></td><!--代号--> <td><{ $v [1]}></td><!--名称--> <td><a href= "shanchu.php?code=<{$v[0]}>" >删除</a></td> <td><a href= "xiugai.php?code=<{$v[0]}>" >修改</a> </td> <td><a href= "tianjia.php?code=<{$v[0]}>" >添加</a></td> </tr> <{/ foreach }> </table> <div><{ $fenye }></div><!--显示分页--> </body> </html> |
添加查询条件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
<! DOCTYPE html> < html > < head > < meta charset="UTF-8"> < title >主页面把main.php里的内容拿过来用</ title > </ head > < body > < h1 >主页面</ h1 > < form action="main.php" method="get"> <!--条件查询--> < div >名称: < input type="text" name="name" /> < input type="submit" value="查询" /> </ div > </ form > < table width="100%" border="1" cellpadding="0" cellspacing="0"> < tr > < td >代号</ td > < td >名称</ td > < td >操作</ td > < td >操作</ td > < td >操作</ td > </ tr > <{foreach $shuju as $v}> <!--$v代表遍历出来的小数组--> < tr > < td ><{$v[0]}></ td > <!--代号--> < td ><{$v[1]}></ td > <!--名称--> < td >< a href="shanchu.php?code=<{$v[0]}>">删除</ a ></ td > < td >< a href="xiugai.php?code=<{$v[0]}>">修改</ a > </ td > < td >< a href="tianjia.php?code=<{$v[0]}>">添加</ a ></ td > </ tr > <{/foreach}> </ table > < div ><{$fenye}></ div > <!--显示分页--> </ body > </ html > |
main.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
<?php include ( "../init.inc.php" ); include ( "../DBDA.php" ); $db = new DBDA(); //条件查询 $tj = " 1=1 " ; if (! empty ( $_GET [ "name" ])) { $n = $_GET [ "name" ]; $tj = " name like '%{$n}%' " ; } $ztj = " where {$tj}" ; //条数 //1.分也需要所有的数据总条数 $sall = "select count(*) from nation" . $ztj ; $zts = $db ->StrQuery( $sall ); //方法执行会等于总条数 include ( "../page.class.php" ); //分页的类文件 $page = new page( $zts ,3); //2.每页显示3条 //分页里的成员变量$page->limit $sql = "select * from nation " . $ztj . $page ->limit; //找数据库里nation表里的所有数据 $arr = $db ->Query( $sql ); //返回二维数组 现在$arr里有查到的所有数据 $smarty ->assign( "fenye" , $page ->fpage()); //分页信息注册到模板里 $smarty ->assign( "shuju" , $arr ); //把查到的所有数据arr放到smarty模板里 $smarty ->display( "main.html" ); //调用display方法 显示模板文件 |
1.块函数格式 双标签元素<{biaoji size='12'}>这里添加内容<{/biaoji}>
<?php function smarty_block_biaoji($args,$content,$smarty,$bs) { //return "aa---{$content}--{$bs}<br>"; if(!$bs) { $size = $args["size"]; $content = "<mark style='font-size:{$size}px'>{$content}</mark>"; return $content; } }
2.样式选择器 <{$str|color}>
<?php function smarty_modifier_color($str) { $str = "<span style='color:red'>{$str}</span>"; return $str; }
3.普通函数 ---- 单标签元素 <{color name='color'}>
<?php /** * 颜色控件 * * @param $name 控件name * @param $value 选中值 * <{color name='titlecolor' value='FF00FF'}> */ function smarty_function_color($args, $smarty) { $name = $args['name']; $value = !empty($args['value']) ? $args['value'] : '000000'; if(!defined('COLOR_INIT')) { define('COLOR_INIT', 1); $str= '<script src="../js/jscolor/jscolor.js"></script>'; } $str .= '<input class="color" style="width:48px;height:16px;overfrom:hidden" name="'.$name.'" value="'.$value.'" />'; return $str; }