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 is_dir() 判断给定文件名是否是一个目录
May 10 PHP
php中OR与|| AND与&amp;&amp;的区别总结
Oct 26 PHP
PHP实现微信公众平台音乐点播
Mar 20 PHP
php解析json数据实例
Aug 19 PHP
PHP如何将log信息写入服务器中的log文件
Jul 29 PHP
PHP常用的三种设计模式
Feb 17 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
Apr 26 PHP
实例介绍PHP删除数组中的重复元素
Mar 03 PHP
php常用字符串查找函数strstr()与strpos()实例分析
Jun 21 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
Sep 02 PHP
Laravel 将数据表的数据导出,并生成seeds种子文件的方法
Oct 09 PHP
laravel实现查询最后执行的一条sql语句的方法
Oct 09 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
mac系统下为 php 添加 pcntl 扩展
2016/08/28 PHP
php 的多进程操作实践案例分析
2020/02/28 PHP
js加强的经典分页实例
2013/03/15 Javascript
jQuery+.net实现浏览更多内容(改编php版本)
2013/03/28 Javascript
js事件冒泡实例分享(已测试)
2013/04/23 Javascript
jquery之超简单的div显示和隐藏特效demo(分享)
2013/07/09 Javascript
javascript 获取函数形参个数
2014/07/31 Javascript
Javascript中this关键字的一些小知识
2015/03/15 Javascript
js实现精美的银灰色竖排折叠菜单
2015/05/16 Javascript
JS实现的不规则TAB选项卡效果代码
2015/09/18 Javascript
JavaScript中获取时间的函数集
2016/08/16 Javascript
AngularJS 依赖注入详解及示例代码
2016/08/17 Javascript
微信JS接口大全
2016/08/25 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
2016/11/21 Javascript
使用vue.js实现checkbox的全选和多个的删除功能
2017/02/17 Javascript
原生JS实现左右箭头选择日期实例代码
2017/03/14 Javascript
vue基于Vue2.0和高德地图的地图组件实例
2017/04/28 Javascript
详解js中Array的方法及技巧
2018/09/12 Javascript
angularjs1.5 组件内用函数向外传值的实例
2018/09/30 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
2019/04/19 Javascript
[43:51]2014 DOTA2国际邀请赛中国区预选赛 Dream Times VS TongFu
2014/05/22 DOTA
Python中用于检查英文字母大写的isupper()方法
2015/05/19 Python
Django框架中方法的访问和查找
2015/07/15 Python
Python实现图片转字符画的示例
2017/08/22 Python
python输出100以内的质数与合数实例代码
2018/07/08 Python
Django基础知识与基本应用入门教程
2018/07/20 Python
Python使用pyshp库读取shapefile信息的方法
2018/12/29 Python
Tensorflow 实现释放内存
2020/02/03 Python
python3 deque 双向队列创建与使用方法分析
2020/03/24 Python
Django使用Profile扩展User模块方式
2020/05/14 Python
StubHub墨西哥:购买和出售您的门票
2016/09/17 全球购物
创业者是否需要商业计划书?
2014/02/07 职场文书
党员廉洁自律个人总结
2015/02/13 职场文书
个人学习总结范文
2015/02/15 职场文书
少先队入队仪式主持词
2015/07/04 职场文书
Python超简单容易上手的画图工具库推荐
2021/05/10 Python