PHP模板引擎Smarty内建函数foreach,foreachelse用法分析


Posted in PHP onApril 11, 2016

本文实例讲述了PHP模板引擎Smarty内建函数foreach,foreachelse用法。分享给大家供大家参考,具体如下:

在 Smarty 模板中,您可以使用 foreach 来重复一个区块。而在模板中则需要从 PHP 中分配过来一个数组。这个数组可以是多维数组。Smarty 中 {foreach} 标记和 PHP 中 foreach 相同,不同的是它们的一个在模板文件中使用,一个在 PHP 脚本中使用。因此,语法会不同。但是,它们的作用都是相同的,即遍历数组中的内容。与 {foreach} 标记相对的还有一个 {foreachelse} 标记,{foreachelse} 标记的作用是:如果数组为空,那么就执行该标记内的内容。 模板中 {foreach} 和 {/foreach} 必须是成对的出现,它有四个参数,其中, from 和 item 两个参数是必要的。关于它的参数请看下面列表:

属性 类型 是否必须 缺省值 描述
from string Yes n/a 待循环数组的名称
item string Yes n/a 当前处理元素的变量名称
key string No n/a 当前处理元素的键名
name string No n/a 该循环的名称,用于访问该循环

我们通过一个实例,来演示 Smarty 中 {foreach} 和 {foreachelse} 的使用。

实例思路:从数据库中取出内容,赋给一个数组变量 $_html ,再给这个数组变量分配给模板,然后在模板中进行该数组的遍历

test.sql (使用到的 SQL 数据)

--
-- 表的结构 `user`
--
CREATE TABLE IF NOT EXISTS `user` (
 `id` mediumint(8) unsigned NOT NULL auto_increment,
 `username` varchar(50) NOT NULL,
 `email` varchar(50) NOT NULL,
 `addTime` datetime NOT NULL default '0000-00-00 00:00:00',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;
--
-- 转存表中的数据 `user`
--
INSERT INTO `user` (`id`, `username`, `email`, `addTime`) VALUES
(1, '苍井空', 'canjingkong@sina.com.cn', '2011-10-24 00:00:00'),
(2, '樱木花道', 'ymhd@163.com', '2011-10-24 00:00:00'),
(3, '赤木晴子', 'chimiqingzi@yahoo.com,cn', '2011-10-24 00:00:00'),
(4, '流川枫', 'lcfeng@sina.com', '0000-00-00 00:00:00'),
(5, '蜡笔小新', 'labixiaoxin@sina.com', '2011-10-24 00:00:00'),
(6, '金刚葫芦娃', 'jghlw@sina.com', '2011-10-24 00:00:00');

init.inc.php (模板初始化文件)

<?php
 define('ROOT_PATH', dirname(__FILE__)); //设置网站根目录
 require ROOT_PATH.'/libs/Smarty.class.php'; //加载 Smarty 模板引擎
 $_tpl = new Smarty(); //创建一个实例对象
 $_tpl->template_dir = ROOT_PATH.'/tpl/'; //重新指定模板目录
 $_tpl->compile_dir = ROOT_PATH.'./com/'; //重新指定编译目录
 $_tpl->left_delimiter = '<{'; //重新指定左定界符
 $_tpl->right_delimiter = '}>'; //重新指定右定界符
?>

index.php(主文件)

<?php
 require 'init.inc.php'; //引入模板初始化文件
 global $_tpl;
 $_mysqli = new mysqli(); //创建一个 mysqli() 对象
 $_mysqli->connect('localhost','root','数据库密码','数据库名'); //连接数据库,请您自行设置
 $_mysqli->set_charset('utf8'); //设置编码
 $_result = $_mysqli->query("select username,email,addTime from user order by id asc");
 $_html = array();
 while (!!$_row=$_result->fetch_assoc()) {
  $_html[] = $_row;
 }
 $_tpl->assign('data',$_html); //把数组分配到模板中
 $_tpl->display('index.tpl'); //引入模板
 $_mysqli->close(); //关闭数据库,释放资源
?>

tpl/index.tpl(主文件 index.php 的模板文件)

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>foreach,foreachelse</title>
</head>
<body>
 <table align="center" border="1" width="800">
  <{foreach from=$data item="row" name="ls"}> <!-- 这个foreach 循环分配过来的数组有几行数据 -->
   <!-- 在此,我们做几个保留变量 $smarty.foreach 的操作 -->
   <!-- 当数据显示第一条的时候,第一行的表格背景为黄色,使用属性:first -->
   <!-- 当数据显示最后一条的时候,最后一行的表格背景为蓝色,使用属性:last -->
   <!-- 显示下分配过来的数组的总个数,使用属性:total -->
   <{if $smarty.foreach.ls.first}>
   <tr bgcolor="#FFFF00"> <!-- 第一行背景为黄色 -->
   <{elseif $smarty.foreach.ls.last}>
   <tr bgcolor="#0000FF"> <!-- 最后一行背景为蓝色 -->
   <{else}>
   <tr>
   <{/if}>
    <td><{$smarty.foreach.ls.iteration}></td><!-- 注意:这里是保留变量 $smarty.foreach 的使用,iteration:总是从 1 开始,每执行一次增加 1 -->
    <{foreach from=$row item="col" name="lsin"}> <!-- 这个foreach 循环数组内的内容,显示在表格的<td></td>标签里 -->
     <td><{$col}></td>
    <{/foreach}>
   </tr>
  <{foreachelse}> <!-- 如果分配过来的数组中没有数据,那么就执行下面的操作! -->
   <tr>
    <td>对不起!暂时没有数据。</td>
   </tr>
  <{/foreach}>
  <tr>
   <td colspan="4" align="center">分配数组的总记录数为:<{$smarty.foreach.ls.total}>条</td>
  </tr>
 </table>
</body>
</html>

执行结果:

PHP模板引擎Smarty内建函数foreach,foreachelse用法分析

最后总结下,主文件 index.php 中传递过去的数组 $_html 为二维数组。保留变量 $smarty.foreach 的使用都是基于 {foreach} 标记中的 name 属性,使用到的保留变量属性有:first(首条记录)、last(末条记录)、iteration(总是从 1 开始,每执行一次增加 1)、total(用于显示循环执行的次数)

希望本文所述对大家基于smarty模板的PHP程序设计有所帮助。

PHP 相关文章推荐
php下的权限算法的实现
Apr 28 PHP
php 采集书并合成txt格式的实现代码
Mar 01 PHP
PHP SQLite类
May 07 PHP
PHP加密扩展库Mcrypt安装和实例
Nov 10 PHP
生成随机字符串和验证码的类的PHP实例
Dec 24 PHP
PHP读取CURL模拟登录时生成Cookie文件的方法
Nov 04 PHP
百度工程师讲PHP函数的实现原理及性能分析(三)
May 13 PHP
PHP session 会话处理函数
Jun 06 PHP
php多线程并发实现方法
Sep 30 PHP
PHP让数组中有相同值的组成新的数组实例
Dec 31 PHP
php利用ob_start()清除输出和选择性输出的方法
Jan 18 PHP
PHP7新增函数
Mar 09 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
Apr 11 #PHP
PHP模板引擎Smarty中变量的使用方法示例
Apr 11 #PHP
php实现生成验证码实例分享
Apr 10 #PHP
PHP实现简单实用的分页类代码
Apr 08 #PHP
PHP文件上传类实例详解
Apr 08 #PHP
PHP实现基于mysqli的Model基类完整实例
Apr 08 #PHP
php生成带logo二维码方法小结
Apr 08 #PHP
You might like
用PHP调用数据库的存贮过程!
2006/10/09 PHP
杏林同学录(五)
2006/10/09 PHP
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
2007/03/29 PHP
PHP 单引号与双引号的区别
2009/11/24 PHP
Laravel核心解读之异常处理的实践过程
2019/02/24 PHP
整理一些JavaScript的IE和火狐的兼容性注意事项
2011/03/17 Javascript
在JavaScript中typeof的用途介绍
2013/04/11 Javascript
javascript html5摇一摇功能的实现
2016/04/19 Javascript
jquery+css实现下拉列表功能
2017/09/03 jQuery
微信小程序时间控件picker view使用详解
2018/12/28 Javascript
Vuejs学习笔记之使用指令v-model完成表单的数据双向绑定
2019/04/29 Javascript
vue tab滚动到一定高度,固定在顶部,点击tab切换不同的内容操作
2020/07/22 Javascript
[02:23]2016国际邀请赛中国区预选赛wings晋级之路
2016/06/29 DOTA
python学习笔记:字典的使用示例详解
2014/06/13 Python
使用Python的Bottle框架写一个简单的服务接口的示例
2015/08/25 Python
浅谈python内置变量-reversed(seq)
2017/06/21 Python
用tensorflow搭建CNN的方法
2018/03/05 Python
Python基于sklearn库的分类算法简单应用示例
2018/07/09 Python
Django开发的简易留言板案例详解
2018/12/04 Python
浅谈matplotlib.pyplot与axes的关系
2020/03/06 Python
Python实现自动打开电脑应用的示例代码
2020/04/17 Python
Python Tornado核心及相关原理详解
2020/06/24 Python
Python unittest生成测试报告过程解析
2020/09/08 Python
奢华时尚的独特视角:La Garçonne
2018/06/07 全球购物
大学生学习生活的自我评价
2013/11/01 职场文书
运动会入场解说词
2014/02/07 职场文书
《风娃娃》教学反思
2014/04/19 职场文书
作文评语大全
2014/04/23 职场文书
党支部综合考察材料
2014/05/19 职场文书
我的中国梦演讲稿300字
2014/08/19 职场文书
学校四风对照检查材料
2014/08/28 职场文书
2014年物流工作总结
2014/11/25 职场文书
贷款收入证明范本
2015/06/12 职场文书
2016年“抗战胜利纪念日”71周年校园广播稿
2015/12/18 职场文书
高中政治教学反思
2016/02/23 职场文书
Java获取e.printStackTrace()打印的信息方式
2021/08/07 Java/Android