smarty循环嵌套用法示例分析


Posted in PHP onJuly 19, 2016

本文实例讲述了smarty循环嵌套用法。分享给大家供大家参考,具体如下:

test3.php:

<?php
require "main.php";
$forum = array(
    array("category_id" => 1, "category_name" => "公告区",
      "topic" => array(
        array("topic_id" => 1, "topic_name" => "站务公告")
      )
    ),
    array("category_id" => 2, "category_name" => "文学专区",
      "topic" => array(
        array("topic_id" => 2, "topic_name" => "好书介绍"),
        array("topic_id" => 3, "topic_name" => "奇文共赏")
      )
    ),
    array("category_id" => 3, "category_name" => "电脑专区",
      "topic" => array(
        array("topic_id" => 4, "topic_name" => "硬件周边"),
        array("topic_id" => 5, "topic_name" => "软件讨论")
      )
    )
);
$tpl->assign("forum", $forum);
$tpl->display("test3.htm");
?>

样版的写法如下:

templates/test3.htm:

<html>
<head>
<title>循环嵌套测试</title>
</head>
<body>
<table width="200" border="0" align="center" cellpadding="3" cellspacing="0">
  <{section name=sec1 loop=$forum}>
  <tr>
    <td colspan="2"><{$forum[sec1].category_name}></td>
  </tr>
  <{section name=sec2 loop=$forum[sec1].topic}>
  <tr>
    <td width="25"> </td>
    <td width="164"><{$forum[sec1].topic[sec2].topic_name}></td>
  </tr>
  <{/section}>
  <{/section}>
</table>
</body>
</html>

test2.php:

<?php
require_once('./include/db_fns.php');
include_once("./Smarty/libs/Smarty.class.php"); //包含Smarty类文件
$smarty = new Smarty(); //建立Smarty实例对象$Smarty
$smarty->template_dir = "./templates/dedecms";//设置模板目录
$smarty->compile_dir = "templates/templates_c"; //设置编译目录
$smarty->assign("template_url", "./");
$smarty->assign("$site_url", "https://3water.com/");
$smarty->assign("$site_name", "文章管理系统");
$smarty->left_delimiter = "<{"; //设置左边界符
$smarty->right_delimiter = "}>"; //设置右边界符
$db_conn = db_connect();
$query = "SELECT cat_ID,cat_name FROM categories ORDER BY cat_ID DESC";
$result = mysql_query($query);
$i = 5;
while(($row = mysql_fetch_array($result)) && $i > 0)
{
        $query2="SELECT ID, post_title, post_date
                FROM post
                WHERE post.post_category =$row[cat_ID]
                AND post_status <> 'unpbulish'
                ORDER BY post_date DESC";
        $result2=mysql_query($query2);
        $i = 5; 
        while(($row2 = mysql_fetch_array($result2)) && $i > 0)
        {
            $row2[post_date]=date('m-d',strtotime($row2[post_date]));
            $category = array("cat_ID"=>"$row[cat_ID]","cat_name"=>"$row[cat_name]",
            "post"=>array("ID"=>"$row2[ID]",
            "post_title"=>"$row2[post_title]" ,
            "post_category"=>"$row2[post_category]" ,
            "post_date"=>"$row2[post_date]"));
            $i--;
        }
}
$smarty->assign("forum", $category);
$smarty->display("test2.htm");
?>

test2.htm:

<html>
<head>
<title>嵌套循环测试</title>
</head>
<body>
<table width="200" border="0" align="center" cellpadding="3" cellspacing="0">
<{section name=sec1 loop=$forum}>
    <tr>
    <td colspan="2"><{$forum[sec1].cat_id}></td>
    </tr>
        <{section name=sec2 loop=$forum[sec1].post}>
        <tr>
        <td width="25"> </td>
        <td width="164"><{$forum[sec1].post[sec2].post_title}></td>
        </tr>
        <{/section}>
<{/section}>
</table>
</body>
</html>

test4.php:

<?php
require "main.php";
$my_array = array(
array("value" => "0"),
array("value" => "1"),
array("value" => "2"),
array("value" => "3"),
array("value" => "4"),
array("value" => "5"),
array("value" => "6"),
array("value" => "7"),
array("value" => "8"),
array("value" => "9"));
$tpl->assign("my_array", $my_array);
$tpl->display('test4.htm');
?>

模版的写法如下:

templates/test4.htm:

<html>
<head>
<title>横向重复表格测试</title>
</head>
<body>
<table width="500" border="1" cellspacing="0" cellpadding="3">
<tr>
<{section name=sec1 loop=$my_array}>
<td><{$my_array[sec1].value}></td>
<{if $smarty.section.sec1.rownum is div by 2}>
</tr>
<tr>
<{/if}>
<{/section}>
</tr>
</table>
</body>
</html>

重点在于 $smarty.section.sec1.rownum 这个 Smarty 变量,在 section 循环中这个变量会取得从 1 开始的索引值,所以当 rownum 能被 2 除尽时,就输出 </tr><tr> 使表格换列 (注意!是 </tr> 在前面<tr> 在后面) 。因此数字 2 就是我们在一列中想要呈现的资料笔数。各位可以由此去变化其它不同的呈现方式。

运算符有以下这些

eq、ne、neq、gt、lt、lte、le、gte、ge、is even、is odd、is not even、is not odd、not、mod、div by、even by、odd by

示例:

<!--{if $bigsize ge '650'}-->
   <img src="photo/<!--{$photo}-->" border="0" width="650" class="product_photo" />
<!--{else}-->
    <img src="photo/<!--{$photo}-->" border="0" class="product_photo" />
<!--{/if}-->

以前不常用smarty,这两天有个朋友的网站要改;顺手用了一下,还是挺有意思的。

关于capture 的说明:

capture函数的作用是收集模板输出的数据到一个变量里,而不是把它们输出到页面. 

任何在   {capture   name="foo"}和{/capture}之间的数据都被收到了由函数的名称属性指定的变量里($foo). 

收集的信息可以用在特殊变量$smarty里. 

例如capture.foo就收集了以上数据.如果函数没有名字属性,将使用"default". 

每个{capture}都必须对应{/capture},也不能嵌套使用capture函数.

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

PHP 相关文章推荐
php木马攻击防御之道
Mar 24 PHP
PHP JSON 数据解析代码
May 26 PHP
Sorting Array Values in PHP(数组排序)
Sep 15 PHP
解析php时间戳与日期的转换
Jun 06 PHP
ThinkPHP表单自动验证实例
Oct 13 PHP
thinkphp实现like模糊查询实例
Oct 29 PHP
php字符串比较函数用法小结(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
Jul 18 PHP
详解php中 === 的使用
Oct 24 PHP
Zend Framework数据库操作方法实例总结
Dec 11 PHP
PHP去除字符串最后一个字符的三种方法实例
Mar 01 PHP
几行代码轻松实现PHP文件打包下载zip
Mar 01 PHP
Yii2处理密码加密及验证的方法
May 12 PHP
PHP中Socket连接及读写数据超时问题分析
Jul 19 #PHP
在PHP语言中使用JSON和将json还原成数组的方法
Jul 19 #PHP
JSON两种结构之对象和数组的理解
Jul 19 #PHP
深入理解PHP JSON数组与对象
Jul 19 #PHP
php字符串比较函数用法小结(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
Jul 18 #PHP
完美利用Yii2微信后台开发的系列总结
Jul 18 #PHP
PHP中set_include_path()函数相关用法分析
Jul 18 #PHP
You might like
火影忍者:这才是千手柱间和扉间的真正死因,角都就比较搞笑了!
2020/03/10 日漫
用PHP+MySql编写聊天室
2006/10/09 PHP
PHP自定session保存路径及删除、注销与写入的方法
2014/11/18 PHP
Yii2实现ActiveForm ajax提交
2017/05/26 PHP
js实现ASP分页函数 HTML分页函数
2006/09/22 Javascript
js获取 type=radio 值的方法
2014/05/09 Javascript
jQuery动态创建html元素的常用方法汇总
2014/09/05 Javascript
Javascript实现获取窗口的大小和位置代码分享
2014/12/04 Javascript
JavaScript实现带缓冲效果的随屏滚动漂浮广告代码
2015/11/06 Javascript
angular2+nodejs实现图片上传功能
2017/03/27 NodeJs
浅谈Vuex的状态管理(全家桶)
2017/11/04 Javascript
Vue中$refs的用法详解
2018/06/24 Javascript
JS散列表碰撞处理、开链法、HashTable散列示例
2019/02/08 Javascript
kafka调试中遇到Connection to node -1 could not be established. Broker may not be available.
2019/09/17 Javascript
Vue项目利用axios请求接口下载excel
2020/11/17 Vue.js
python简单判断序列是否为空的方法
2015/06/30 Python
python实现linux下抓包并存库功能
2018/07/18 Python
PyGame贪吃蛇的实现代码示例
2018/11/21 Python
python中的句柄操作的方法示例
2019/06/20 Python
python爬虫 批量下载zabbix文档代码实例
2019/08/21 Python
解决flask接口返回的内容中文乱码的问题
2020/04/03 Python
pytorch学习教程之自定义数据集
2020/11/10 Python
python 多线程爬取壁纸网站的示例
2021/02/20 Python
Html5大文件断点续传实现方法
2015/12/05 HTML / CSS
全球速卖通西班牙站:AliExpress西班牙
2017/10/30 全球购物
使用索引有什么好处
2016/07/27 面试题
怎么写好自荐书
2014/03/02 职场文书
教师中国梦演讲稿
2014/04/23 职场文书
态度决定一切演讲稿
2014/05/20 职场文书
支部鉴定材料
2014/06/02 职场文书
2014年关工委工作总结
2014/11/17 职场文书
2014年计生协会工作总结
2014/11/21 职场文书
乐山大佛导游词
2015/02/02 职场文书
导游词400字
2015/02/13 职场文书
单位工作证明范本
2015/06/15 职场文书
Selenium浏览器自动化如何上传文件
2022/04/06 Python