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+MYSQL的文章管理系统(一)
Oct 09 PHP
MySql 按时间段查询数据方法(实例说明)
Nov 02 PHP
PHP 最大运行时间 max_execution_time修改方法
Mar 08 PHP
PHP教程之PHP中shell脚本的使用方法分享
Feb 23 PHP
php网站判断用户是否是手机访问的方法
Nov 01 PHP
PHP编译安装中遇到的两个错误和解决方法
Aug 20 PHP
使用php实现从身份证中提取生日
May 09 PHP
基于PHP常用文件函数和目录函数整理
Aug 17 PHP
PHP自定义函数实现assign()数组分配到模板及extract()变量分配到模板功能示例
May 23 PHP
Laravel框架控制器的request与response用法示例
Sep 30 PHP
PHP 枚举类型的管理与设计知识点总结
Feb 13 PHP
php 解析非标准json、非规范json
Apr 01 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 SQL之where语句生成器
2009/03/24 PHP
php+mysql事务rollback&amp;commit示例
2010/02/08 PHP
Yii2实现ActiveForm ajax提交
2017/05/26 PHP
Laravel如何实现自动加载类
2019/10/14 PHP
基于JQuery实现相同内容合并单元格的代码
2011/01/12 Javascript
javascript 判断中文字符长度的函数代码
2012/08/27 Javascript
jquery自动切换tabs选项卡的具体实现
2013/12/24 Javascript
javascript中setTimeout的问题解决方法
2014/05/08 Javascript
为何JS操作的href都是javascript:void(0);呢
2015/11/12 Javascript
小巧强大的jquery layer弹窗弹层插件
2015/12/06 Javascript
JS延时器提示框的应用实例代码解析
2016/04/27 Javascript
详解nodejs的express如何自动生成项目框架
2017/07/12 NodeJs
浅谈sass在vue注意的地方
2017/08/10 Javascript
浅谈webpack性能榨汁机(打包速度优化)
2019/01/09 Javascript
原生js实现each方法实例代码详解
2019/05/27 Javascript
Python Paramiko模块的使用实际案例
2018/02/01 Python
解决pandas .to_excel不覆盖已有sheet的问题
2018/12/10 Python
利用selenium爬虫抓取数据的基础教程
2019/06/10 Python
python射线法判断一个点在图形区域内外
2019/06/28 Python
wxPython多个窗口的基本结构
2019/11/19 Python
Python自动化办公Excel模块openpyxl原理及用法解析
2020/11/05 Python
基于django和dropzone.js实现上传文件
2020/11/24 Python
基于css3的属性transition制作菜单导航效果
2015/09/01 HTML / CSS
HTML5中div、article、section的区别及使用介绍
2013/08/14 HTML / CSS
GE设备配件:GE Appliance Parts(家电零件、配件和滤水器)
2018/11/28 全球购物
党校培训思想汇报
2014/01/03 职场文书
校运会广播稿100字
2014/01/27 职场文书
中学生自我鉴定
2014/02/04 职场文书
企业消防安全责任书
2014/07/23 职场文书
开会通知
2015/04/20 职场文书
七年级数学教学反思
2016/02/17 职场文书
2016优秀员工先进事迹材料
2016/02/25 职场文书
2016年区委书记抓基层党建工作公开承诺书
2016/03/25 职场文书
python读取pdf格式文档的实现代码
2021/04/01 Python
CSS3 制作的悬停缩放特效
2021/04/13 HTML / CSS
基于Apache Hudi在Google云构建数据湖平台的思路详解
2022/04/07 Servers