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 相关文章推荐
杏林同学录(六)
Oct 09 PHP
实用函数10
Nov 08 PHP
php file_get_contents函数轻松采集html数据
Apr 22 PHP
php数据库抽象层 PDO
May 07 PHP
php正则表达式使用的详细介绍
Apr 27 PHP
php实现利用phpexcel导出数据
Aug 24 PHP
PHP清除数组中所有字符串两端空格的方法
Oct 20 PHP
php检查页面是否被百度收录
Oct 28 PHP
php使用file函数、fseek函数读取大文件效率对比分析
Nov 04 PHP
PHP执行shell脚本运行程序不产生core文件的方法
Dec 28 PHP
php file_get_contents取文件中数组元素的方法
Apr 01 PHP
yii2.0整合阿里云oss的示例代码
Sep 19 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 抓取网页图片并且另存为的实现代码
2010/03/24 PHP
发款php蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
PHP发送短信代码分享
2015/08/11 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
2016/04/30 PHP
php面向对象编程self和static的区别
2016/05/08 PHP
关于PHP转换超过2038年日期出错的问题解决
2017/06/28 PHP
PHP基于GD2函数库实现验证码功能示例
2019/01/27 PHP
PHP unset函数原理及使用方法解析
2020/08/14 PHP
javascript实现页面内关键词高亮显示代码
2014/04/03 Javascript
Jquery实现Div上下移动示例
2014/04/23 Javascript
javascript处理表单示例(javascript提交表单)
2014/04/28 Javascript
jQuery中$.each使用详解
2015/01/29 Javascript
JavaScript中的Repaint和Reflow用法详解
2015/07/27 Javascript
JS实现方向键切换输入框焦点的方法
2015/08/19 Javascript
easyui combotree加载静态数据问题(选不上)解决方法
2016/12/26 Javascript
JQuery查找子元素find()和遍历集合each的方法总结
2017/03/07 Javascript
JS简单实现数组去重的方法分析
2017/10/14 Javascript
使用Vue写一个datepicker的示例
2018/01/27 Javascript
JavaScript实现动态添加、移除元素或属性的方法分析
2019/01/03 Javascript
教你完全理解ReentrantLock重入锁
2019/06/03 Javascript
如何利用vue实现波谱拟合详解
2020/11/05 Javascript
详解Vue2的diff算法
2021/01/06 Vue.js
[01:47]2018年度DOTA2最具人气解说-完美盛典
2018/12/16 DOTA
Python IDE PyCharm的基本快捷键和配置简介
2015/11/04 Python
python解决网站的反爬虫策略总结
2016/10/26 Python
python在新的图片窗口显示图片(图像)的方法
2019/07/11 Python
python框架flask入门之路由及简单实现方法
2020/06/07 Python
J2EE面试题大全
2016/08/06 面试题
文秘专业应届生求职信范文
2013/11/14 职场文书
银行服务感言
2014/03/01 职场文书
孝敬父母的活动方案
2014/08/31 职场文书
2015年度电厂个人工作总结
2015/05/13 职场文书
2015年语文教学工作总结
2015/05/25 职场文书
mysql知识点整理
2021/04/05 MySQL
html5表单的required属性使用
2021/07/07 HTML / CSS
html5 录制mp3音频支持采样率和比特率设置
2021/07/15 Javascript