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 相关文章推荐
如何将数据从文本导入到mysql
Oct 09 PHP
php 日期时间处理函数小结
Dec 18 PHP
由php的call_user_func传reference引发的思考
Jul 23 PHP
php设计模式 Observer(观察者模式)
Jun 26 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
Aug 08 PHP
PHP使用Alexa API获取网站的Alexa排名例子
Jun 12 PHP
ThinkPHP CURD方法之page方法详解
Jun 18 PHP
destoon实现调用当前栏目分类及子分类和三级分类的方法
Aug 21 PHP
YII Framework框架教程之缓存用法详解
Mar 14 PHP
php提交过来的数据生成为txt文件
Apr 28 PHP
php生成二维码图片方法汇总
Dec 17 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
Jun 06 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 memcache扩展的三种安装方法
2009/04/26 PHP
完美解决Thinkphp3.2中插入相同数据的问题
2017/08/01 PHP
兼容ie、firefox的图片自动缩放的css跟js代码分享
2012/01/21 Javascript
JS模拟自动点击的简单实例
2013/08/08 Javascript
禁止iframe页面的所有js脚本如alert及弹出窗口等
2014/09/03 Javascript
JS应用正则表达式转换大小写示例
2014/09/18 Javascript
jQuery中:eq()选择器用法实例
2014/12/29 Javascript
学习JavaScript设计模式之中介者模式
2016/01/14 Javascript
详解js中的apply与call的用法
2016/07/30 Javascript
jQuery中$.ajax()方法参数解析
2016/10/22 Javascript
jquery.Callbacks的实现详解
2016/11/30 Javascript
jquery表单验证实例仿Toast提示效果
2017/03/03 Javascript
Windows下Node.js安装及环境配置方法
2017/09/18 Javascript
JS跳转手机站url的若干注意事项
2017/10/18 Javascript
微信小程序表单验证功能完整实例
2017/12/01 Javascript
React-native桥接Android原生开发详解
2018/01/17 Javascript
对angularJs中自定义指令replace的属性详解
2018/10/09 Javascript
使用vue-cli3+typescript的项目模板创建工程的教程
2020/02/28 Javascript
jQuery实现简单弹幕制作
2020/12/10 jQuery
[55:26]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第一场 2月23日
2021/03/11 DOTA
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
2020/02/10 Python
Python读取表格类型文件代码实例
2020/02/17 Python
CSS实现限制字数功能当对象内文本溢出时显示省略标记
2014/08/20 HTML / CSS
移动端Web页面的CSS3 flex布局快速上手指南
2016/05/31 HTML / CSS
Html5页面中的返回实现的方法
2018/02/26 HTML / CSS
国外平面设计第一市场:99designs
2016/10/25 全球购物
美国演唱会订票网站:Ticketmaster美国
2017/10/05 全球购物
GAP阿联酋官网:GAP UAE
2017/11/30 全球购物
如何查找和删除数据库中的重复数据
2014/11/05 面试题
杭州-DOTNET笔试题集
2013/09/25 面试题
如何进行Linux分区优化
2016/09/13 面试题
《称象》教学反思
2014/04/25 职场文书
白银帝国观后感
2015/06/17 职场文书
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
2021/06/11 Python
python实现简易自习室座位预约系统
2021/06/30 Python
ubuntu如何搭建vsftpd服务器
2022/12/24 Servers