0%

模板修饰符可以改变变量的显示形式,比如说定义日期的显示效果。模板中用法: {变量名|修饰符:参数} 参数为可选。 修饰符: capitalize: 所有单词首字母转大写 count_characters:返回变量包含字符数量 count_words:返回单词数量 data_format:对时间变量格式化 default:变量为空或未定义时,设置一个默认值 strip_tags:过滤html标签 truncate:截取字符串

如果多个网页的一部分代码是相同的,完全可以把这一部分独立出来,做成一个模板文件,在需要的地方,引入。如: {include file="b.html"} 另外include_php在最新版的Smarty中已经被弃用了

section与foreach类似,用于遍历数组内元素,但section更加强大,可以设定起始索引,步进,最大循环次数

{section name=sec loop=$array}
{$array[sec]}<br />
{sectionelse}
该数组没有元素<br />
{/section}

name属性必须有,功能类似于索引,loop属性指定待遍历的数组。 可选属性: start:指定循环开始的索引 step:循环的步进,若是负值,由后往前循环 max:循环最大次数 show:指定是否显示当前的section,值为TRUE或FALSE

模板:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
{assign var="title" value="网页标题"}
<title>{$title}</title>
</head>
<body>
{foreach from=$array item=arrayitem}
{$arrayitem}<br />
{/foreach}
</body>
</html>

带key的数组,可以用foreach的key属性指定,如: {foreach from=$array item=arrayitem key=index} {$index}:{$arrayitem} {/foreach} php文件:

<?php
require_once 'libs/Smarty.class.php';
$smarty=new Smarty();
$array=array("a","b","c","d");
$smarty->assign("array",$array);
$smarty->display("index.html");
?>

{$smarty.get.user} {*读取get请求中的user参数*} {$smarty.post.user} {*读post*} {$smarty.request.user} {*读post和get*} {$smarty.session.user} {*读session*} {$smarty.cookies.user} {*读cookies*} {$smarty.server.SERVER_NAME} {*读主机名*}

在php文件中用Smarty对象的assign方法定义(参考前文),也可以在模板文件中定义:

{assign var="title" value="网页标题"}
<title>{$title}</title>

模板index.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>{$title}</title>
</head>
<body>
{if $scope>=90}
优秀
{elseif $scope>=70}
一般
{elseif $scope>=60}
及格
{else}
不及格
{/if}
</body>
</html>

判断结束需要关闭标签. index.php

<?php
require_once 'libs/Smarty.class.php';
//引入Smarty类
$smarty=new Smarty();
//初始化
$smarty->assign("title","标题");
//设置变量
$smarty->assign("scope",30);
$smarty->display("index.html");
//显示
?>

内置对象指的是,不需要声明实例化,即可以使用的对象。JSP有9个内置对象。 1.request:javax.servlet.http.HttpServletRequest的实例,获取客户端请求 2.response:javax.servlet.http.HttpServletResponse的实例,对客户端的请求作出响应 3.session:javax.servlet.http.HttpSession的实例,session用于保存会话状态和会话信息,比如说用户登录。理论上讲,在关闭浏览器后,重新打开浏览器,应该属于两个不同的会话,但实际上,好像Firefox和IE是这样的,但是Chrome和搜狗浏览器,关闭浏览器后再打开同一页面,还能读取到之前保存的信息。 4.out:javax.servlet.jsp.JspWriter的实例,向客户端输出数据 5.page 指当前页面本身,类似于this关键字 6.application: javax.servlet.ServletContext的实例,用于设置和读取全局变量,作用范围是整个项目。 7.pageContext:javax.servlet.jsp.PageContext的实例,用于管理对属于JSP中特殊可见部分叫已经命名的对象的访问,不太理解 8.config:javax.servlet.ServletConfig的实例,读取服务器配置参数 9.exception: java.lang.Throwable的实例,处理错误和异常,仅在isErrorPage为true时可用

Smarty模板引擎可以把UI与程序分离,程序员可以和美工分工合作,提高工作效率。 第一步:下载Smarty,把libs目录解压到项目根目录,在根目录创建四个目录:cache,configs,templates,templates_c。 第二步:写模板 在templates新建模板文件index.html(默认是tpl后缀,但可以改成html,以便编辑器高亮显示),内容如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>{$title}</title>
</head>
<body>
{$content}
</body>
</html>

变量标签用花括号括起来。 回到根目录,新建index.php:

<?php
require_once 'libs/Smarty.class.php';
//引入Smarty类
$smarty=new Smarty();
//初始化
$smarty->assign("title","标题");
$smarty->assign("content","内容");
//设置变量
$smarty->display("index.html");
//显示

?>

ctype函数可以验证字符串是否符合某条件,比如说是否只包含数字、是否只包含字母等等 ctype_alnum — 是否只包含数字和字母 ctype_alpha — 是否只包含字母 ctype_cntrl — 是否只包含控制符\r \t \n之类 ctype_digit — 是否只包含数字 ctype_graph — 是否只包含可打印的字符(除空格外) ctype_lower — 是否只包含小写字母 ctype_print — 是否只包含可打印的字符,包括空格 ctype_punct — 是否只包含非数字、字符或空格等可打印的字符 ctype_space — 是否只包含空白符和控制符 ctype_upper — 是否只包含大写字母 ctype_xdigit — 是否是十六进进字符串 下面是一个验证用户名的例子:

<?php
if(ctype_alnum(@$_POST["username"]))
{
    echo "用户名符合条件";
    
}else{
    echo "用户名不符,只能包含数字和字母";
}
?>
<br />
<br />
<br />
<form action="index.php" method="post">
    用户名:<input type="text" name="username" /><br /> 
    <input type="submit" value="提交" />
</form>

虽然正则表达式能完全ctype和Filter的工作,但正则表达式消耗的资源更多。