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+javascript实现二级级联菜单的制作
May 06 PHP
实用PHP会员权限控制实现原理分析
May 29 PHP
php 字符串替换的方法
Jan 10 PHP
PHP中file_exists与is_file,is_dir的区别介绍
Sep 12 PHP
PHP中ini_set和ini_get函数的用法小结
Feb 18 PHP
zf框架的数据库追踪器使用示例
Mar 13 PHP
php中curl使用指南
Feb 05 PHP
smarty简单应用实例
Nov 03 PHP
thinkPHP的表达式查询用法详解
Sep 14 PHP
实例讲解YII2中多表关联的使用方法
Jul 21 PHP
PHP仿tp实现mvc框架基本设计思路与实现方法分析
May 23 PHP
thinkphp整合系列之极验滑动验证码geetest功能
Jun 18 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
php mysql Errcode: 28 终极解决方法
2009/07/01 PHP
php与paypal整合方法
2010/11/28 PHP
ThinkPHP3.0略缩图不能保存到子目录的解决方法
2012/09/30 PHP
PHP迭代器的内部执行过程详解
2013/11/12 PHP
php使用递归计算文件夹大小
2014/12/24 PHP
PHP树-不需要递归的实现方法
2016/06/21 PHP
javaScript 动态访问JSon元素示例代码
2013/08/30 Javascript
JavaScript网页定位详解
2014/01/13 Javascript
JavaScript中Array的实用操作技巧分享
2016/09/11 Javascript
Vue实现自带的过滤器实例
2017/03/09 Javascript
JS中将多个逗号替换为一个逗号的实现代码
2017/06/23 Javascript
js 取消页面可以选中文字的功能方法
2018/01/02 Javascript
微信小程序提取公用函数到util.js及使用方法示例
2019/01/10 Javascript
python中的代码编码格式转换问题
2015/06/10 Python
Python检测生僻字的实现方法
2016/10/23 Python
解决pycharm py文件运行后停止按钮变成了灰色的问题
2018/11/29 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
2019/07/07 Python
基于Python安装pyecharts所遇的问题及解决方法
2019/08/12 Python
Django1.11自带分页器paginator的使用方法
2019/10/31 Python
python 字符串的驻留机制及优缺点
2020/06/19 Python
css3 background属性调整增强介绍
2010/12/18 HTML / CSS
简单的HTML5初步入门教程
2015/09/29 HTML / CSS
德国W家官网,可直邮中国的母婴商城:Windeln.de
2021/03/03 全球购物
挂牌仪式策划方案
2014/05/18 职场文书
幼儿园家长安全责任书
2014/07/22 职场文书
岗位说明书怎么写
2014/07/30 职场文书
2014年司机工作总结
2014/11/21 职场文书
音乐教师个人总结
2015/02/06 职场文书
医生辞职信范文
2015/03/02 职场文书
2015新学期校长寄语(3篇)
2015/03/25 职场文书
2015年乡镇党务公开工作总结
2015/05/19 职场文书
职位证明模板
2015/06/23 职场文书
2016年教师节慰问信
2015/12/01 职场文书
创业计划书之外语培训班
2019/11/02 职场文书
详细聊聊关于Mysql联合查询的那些事儿
2021/10/24 MySQL
Python开发五子棋小游戏
2022/05/02 Python