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 用sock技术发送邮件的函数
Jul 21 PHP
php addslashes及其他清除空格的方法是不安全的
Jan 25 PHP
探讨如何在PHP开启gzip页面压缩实例
Jun 09 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
Jun 28 PHP
PHP json_decode函数详细解析
Feb 17 PHP
PHP return语句另类用法不止是在函数中
Sep 17 PHP
php实现高效获取图片尺寸的方法
Dec 12 PHP
PHP跨平台获取服务器IP地址自定义函数分享
Dec 29 PHP
php实现计数器方法小结
Jan 05 PHP
php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
Sep 23 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
Jul 21 PHP
Windows服务器中PHP如何安装redis扩展
Sep 27 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和oracle数据库性能比较
2006/10/09 PHP
php fputcsv命令 写csv文件遇到的小问题(多维数组连接符)
2011/05/24 PHP
PHP设计模式之命令模式的深入解析
2013/06/13 PHP
php类声明和php类使用方法示例分享
2014/03/29 PHP
apache和PHP如何整合在一起
2015/10/12 PHP
解决json日期格式问题的3种方法
2014/02/02 Javascript
thinkphp 表名 大小写 窍门
2015/02/01 Javascript
JavaScript中标识符提升问题
2015/06/11 Javascript
jQuery实现点击小图片淡入淡出显示大图片特效
2015/09/09 Javascript
ES6新数据结构Map功能与用法示例
2017/03/31 Javascript
JavaScript实现前端分页控件
2017/04/19 Javascript
jQuery Layer弹出层传值到父页面的实现代码
2017/08/17 jQuery
基于Vue生产环境部署详解
2017/09/15 Javascript
JS常见构造模式实例对比分析
2018/08/27 Javascript
JS严格模式原理与用法实例分析
2020/04/27 Javascript
使用webpack和rollup打包组件库的方法
2021/02/25 Javascript
[02:33]DOTA2亚洲邀请赛趣味视频之吐真话筒
2018/03/31 DOTA
[03:13]DOTA2-DPC中国联赛1月25日Recap集锦
2021/03/11 DOTA
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
利用python对Excel中的特定数据提取并写入新表的方法
2018/06/14 Python
python实现两张图片的像素融合
2019/02/23 Python
详解python3 + Scrapy爬虫学习之创建项目
2019/04/12 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
TensorFlow固化模型的实现操作
2020/05/26 Python
python能自学吗
2020/06/18 Python
利用CSS3的transform做的动态时钟效果
2011/09/21 HTML / CSS
HelloFresh奥地利:立即订购烹饪盒
2019/02/22 全球购物
大学生入党自我鉴定
2013/10/31 职场文书
市场安全管理制度
2014/01/26 职场文书
JAVA程序员自荐书
2014/01/30 职场文书
幼儿园父亲节活动方案
2014/03/11 职场文书
我们的节日清明节活动总结
2014/04/30 职场文书
商务英语专业求职信
2014/06/26 职场文书
2015七夕情人节宣传语
2015/07/14 职场文书
2016年小学教师政治学习心得体会
2016/01/23 职场文书
小喇叭开始广播了! 四十多年前珍贵老照片
2022/05/09 无线电