php学习笔记(三十八)smarty中的内建函数的使用

init.smarty.php

<?php

	define("ROOT", ".");

	//解决问题:Warning: strftime() [function.strftime]:
	date_default_timezone_set("Asia/Shanghai");
	include ROOT."/libs/Smarty.class.php";
	
	$tpl = new Smarty();
	
	//smarty初始化
	$tpl->template_dir=ROOT."/templates/";
	$tpl->compile_dir=ROOT."/templates_c/";
	//配置文件位置
	$tpl->config_dir=ROOT."/configs/";
	$tpl->left_delimiter="<!--{";
	$tpl->right_delimiter="}-->";
	?>

mysmarty.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<!--{config_load file="view.conf" section="one"}-->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><!--{$title}--></title>
</head>
<body>
<!--{include file="header.html"}-->
<!--{capture name="cat"}-->
capture<br>
<!--{/capture}-->
<!--{$smarty.capture.cat}-->


<!--{if $num == 1}-->
#####1
<!--{elseif $num eq 2}-->
#####2
<!--{else $num == 3}-->
#####3
<!--{/if}-->
<br>

<!--{foreach from="$row1" item="val" name="one"}-->
	<!--{$val}--><br>
<!--{foreachelse}-->
数组为空,或没有分配
<!--{/foreach}-->
<!--{$smarty.foreach.one.total}-->
<br>
<!--{foreach from="$row2" item="val2" key="k" name="two"}-->
	<!--{$k}-->==<!--{$val2}--><br>
<!--{foreachelse}-->
数组为空,或没有分配
<!--{/foreach}-->


<table	border="1">
<!--{foreach from="$data" item="row" name="outer"}-->
	<!--{if $smarty.foreach.outer.iteration is even}-->
	<tr bgcolor="#cccccc">
	<!--{elseif $smarty.foreach.outer.first}-->
	<tr bgcolor="red">
	<!--{elseif $smarty.foreach.outer.last}-->
	<tr bgcolor="blue">
	<!--{else}-->
	<tr>
	<!--{/if}-->
	
		<!--{foreach from="$row" item="col" name="inner"}-->
			<td>
				<!--{$col}--><br>
			</td>
		<!--{foreachelse}-->
			<td>数组为空,或没有分配</td>
		<!--{/foreach}-->
	</tr>
<!--{foreachelse}-->
	<tr><td>数组为空,或没有分配</td></tr>
<!--{/foreach}-->
</table>
共计<!--{$smarty.foreach.one.total}-->行<br>



<!--{section loop=$sec name="ls"}-->
	<!--{$sec[ls]}-->
<!--{sectionelse}-->
	数组为空,或没有分配
<!--{/section}-->
<table	border="1" width="800">
<!--{section loop=$secT name="ls" max="3" start="8" step="6"}-->
	<tr>
		<td><!--{$smarty.section.ls.rownum}--></td>
		<td><!--{$smarty.section.ls.index}--></td>
		<td><!--{$secT[ls].id}--></td>
		<td><!--{$secT[ls].name}--></td>
		<td><!--{$secT[ls].price}--></td>
		
		<td>
			<!--{section loop=$secT[ls].sub name="lsin"}-->
				<!--{$secT[ls].sub[lsin].one}-->
				<!--{$secT[ls].sub[lsin].two}-->
			<!--{/section}-->
		</td>
	</tr>
<!--{sectionelse}-->
	<tr><td>数组为空,或没有分配</td></tr>
<!--{/section}-->
</table>
<br>
</body>
</html>

header.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>
这是个文件头
</body>
</html>

mysmarty.php

<?php
/**
 * 
 * 以下所有使用变量都要基于设定的前缀和后缀<!--{}-->
 * 内建函数使用
 * 一:内建函数
 * 		在模板中的调用方式都是和使用Html标记类似
 * 		smarty内部的函数,只能按照系统提供的方式使用,不可以修改,也不能添加和删除
 * 		使用范围:
 * 			流程控制 if 
 * 			数组的遍历
 * 			文件操作(包含、配置文件导入)
 * 
 * 二:自定义函数
 * 		1.可以通过注解和smarty插件方式,加入自己的函数到smarty中,相当于扩展
 * 		2.系统提供的自定义函数可以修改
 * 
 * 三:常用的内建函数
 * config_load:<!--{config_load file="view.conf" section="one"}-->
 * include:	<!--{include file="header.html"}-->(子模板要注意变量的接收)
 * 
 * if,elseif,else
 *	 <!--{if $num == 1}-->
 *	 	#####1
 *	 <!--{elseif $num eq 2}-->
 *		#####2
 *	 <!--{else $num == 3}-->
 * 		#####3
 *	 <!--{/if}-->
 *	判断条件:(太多)
 *		eq(相等)、ne(不相等)、neq(不相等)、gt(大于)、lt(小于)、lte(小于等于)、
 *		le(小于等于)、gte(大于等于)、ge(大于等于)、is even(是否是偶数)、is odd(是否是奇数)
 *		is not even(是否是偶数)、is not odd(是否是奇数)、not(非/反)、mod(求模)、
 *		div by($a/$b整除)、even by($a/$b%2==0,相除再判断是否是偶数)、odd by(相除再判断是否是奇数)、
 *		===(相等包括类型)、==、!=、>、<、<=、>=
 *
 * foreach,foreeachesle
 * 		foreach和php的foreach用法相同,多了一个foreeachesle(数组为空执行)
 * 		name和key可以不添加;name是起名字;key是取下标值
 * 		<!--{foreach from="$row2" item="val2" key="k" name="two"}-->
 * 			<!--{$k}-->==<!--{$val2}--><br>
 * 		<!--{foreachelse}-->
 * 			数组为空,或没有分配
 * 		<!--{/foreach}-->
 * 		
 * 		保留变量获取循环的信息
 * 		循环次数:<!--{$smarty.foreach.one.total}-->
 * 		循环标号:<!--{$smarty.foreach.one.iteration}-->
 * 		循环第一次:<!--{$smarty.foreach.one.first}-->
 * 		循环最后一次:<!--{$smarty.foreach.one.last}-->
 * 
 * section(建议使用section;但是不支持关联数组,需要将关联数组先转换)
 * 		**所遍历的只能是下标连续的索引数组
 * 		一:效率高于foreach(底层实现是for循环,for循环比foreach效率高)
 * 		二:要比foreach功能多
 * 
 * capture:(隐藏,将变量保存下来,用$smarty.capture来使用)
 * 	<!--{capture name="cat"}-->
 * 	capture<br>
 * 	<!--{/capture}-->
 * 	使用:<!--{$smarty.capture.cat}-->
 * php(潜入php代码,不建议使用)
 * 	<!--{php}-->
 * 	<!--{/php}-->
 * 		
 */
	//如果文件加载失败require会停止继续解析php;而include则会继续向下执行
	require 'init.smarty.php';
	$title="这是一个文字标题";
	$mysqli = new mysqli("localhost","root","root","hibernate");
	$result = $mysqli->query("select id,name,price from users");
	$row1 = $result->fetch_row();
	$row2 = $result->fetch_assoc();
	$data=array();
	$sect=array();
	while ($row=$result->fetch_assoc()){
		$data[]=$row;
		$row["sub"]=array(array("one"=>"aa","two"=>"bb"));
		$sect[]=$row;
	}
	
	$tpl->assign("title",$title);
	$tpl->assign("var",true);
	$tpl->assign("num",2);
	$tpl->assign("row1",$row1);
	$tpl->assign("row2",$row2);
	$tpl->assign("data",$data);
	//下标是连续的索引数组
	$row1[]="ww";
	$tpl->assign("sec",$row1);
	$tpl->assign("secT",$sect);
	//模板文件名可以随便定义:比如:mysmarty.tpl只有内容是html就可以了
	$tpl->display("mysmarty.html");
?>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值