首页 后端开发 php教程 关于smarty循环嵌套的用法

关于smarty循环嵌套的用法

Jun 19, 2018 am 10:17 AM
smarty 嵌套 循环

这篇文章主要介绍了smarty循环嵌套用法,结合实例形式分析了Smarty模板嵌套循环的实现技巧与相关注意事项,需要的朋友可以参考下

本文实例讲述了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(&#39;./include/db_fns.php&#39;);
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", "//www.jb51.net/");
$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 <> &#39;unpbulish&#39;
                ORDER BY post_date DESC";
        $result2=mysql_query($query2);
        $i = 5; 
        while(($row2 = mysql_fetch_array($result2)) && $i > 0)
        {
            $row2[post_date]=date(&#39;m-d&#39;,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(&#39;test4.htm&#39;);
?>
登录后复制

模版的写法如下:

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 p by 2}>
</tr>
<tr>
<{/if}>
<{/section}>
</tr>
</table>
</body>
</html>
登录后复制

重点在于 $smarty.section.sec1.rownum 这个 Smarty 变量,在 section 循环中这个变量会取得从 1 开始的索引值,所以当 rownum 能被 2 除尽时,就输出 使表格换列 (注意!是 在前面 在后面) 。因此数字 2 就是我们在一列中想要呈现的资料笔数。各位可以由此去变化其它不同的呈现方式。

运算符有以下这些

eq、ne、neq、gt、lt、lte、le、gte、ge、is even、is odd、is not even、is not odd、not、mod、p by、even by、odd by

示例:

<!--{if $bigsize ge &#39;650&#39;}-->
   <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函数.

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

关于PHP模板引擎Smarty内建函数section和sectionelse的用法

以上是关于smarty循环嵌套的用法的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Go语言中的泛型函数是否可以相互嵌套? Go语言中的泛型函数是否可以相互嵌套? Apr 16, 2024 pm 12:09 PM

嵌套泛型函数Go1.18中的泛型函数允许创建适用于多种类型的函数,而嵌套泛型函数可以创建可重用的代码层级结构:泛型函数可以相互嵌套,创建一个嵌套的代码重用结构。通过将过滤器和映射函数组成管道,可以创建可重复使用的类型安全管道。嵌套泛型函数提供了创建可重用、类型安全的代码的强大工具,从而提高代码效率和维护性。

如何使用Vue表单处理实现表单的递归嵌套 如何使用Vue表单处理实现表单的递归嵌套 Aug 11, 2023 pm 04:57 PM

如何使用Vue表单处理实现表单的递归嵌套引言:随着前端数据处理和表单处理的复杂性不断增加,我们需要通过一种灵活的方式来处理复杂的表单。Vue作为一种流行的JavaScript框架,为我们提供了许多强大的工具和特性来处理表单的递归嵌套。本文将向大家介绍如何使用Vue来处理这种复杂的表单,并附上代码示例。一、表单的递归嵌套在某些场景下,我们可能需要处理递归嵌套的

如何在HTML中创建嵌套表格? 如何在HTML中创建嵌套表格? Sep 09, 2023 pm 10:05 PM

表格是网络开发的基本和关键方面,用于以有序且清晰的格式呈现信息。然而,在某些情况下可能需要呈现更复杂的数据,从而需要使用嵌套表。嵌套表是位于其他表格单元格内的表。在本文中,我们将引导您完成在HTML中构建嵌套表格的过程,并通过细致详细的解释并附有插图来帮助您更有效地理解概念。无论您是新手还是经验丰富的网页设计师,本文都将为您提供熟练地使用HTML创建嵌套表格所需的知识和专业知识。在我们开始探索制作嵌套表格之前,有必要了解HTML表格的基本构成。HTML表格是通过<table>元素的实

lambda表达式跳出循环 lambda表达式跳出循环 Feb 20, 2024 am 08:47 AM

lambda表达式跳出循环,需要具体代码示例在编程中,循环结构是经常使用的一种重要语法。然而,在特定的情况下,我们可能希望在循环体内满足某个条件时,跳出整个循环,而不是仅仅终止当前的循环迭代。在这个时候,lambda表达式的特性可以帮助我们实现跳出循环的目标。lambda表达式是一种匿名函数的声明方式,它可以在内部定义简单的函数逻辑。它与普通的函数声明不同,

Go语言中的循环和递归的比较研究 Go语言中的循环和递归的比较研究 Jun 01, 2023 am 09:23 AM

注:本文以Go语言的角度来比较研究循环和递归。在编写程序时,经常会遇到需要对一系列数据或操作进行重复处理的情况。为了实现这一点,我们需要使用循环或递归。循环和递归都是常用的处理方式,但在实际应用中,它们各有优缺点,因此在选择使用哪种方法时需要考虑实际情况。本文将对Go语言中的循环和递归进行比较研究。一、循环循环是一种重复执行某段代码的机制。Go语言中主要有三

如何在C++中实现嵌套异常处理? 如何在C++中实现嵌套异常处理? Jun 05, 2024 pm 09:15 PM

嵌套异常处理在C++中通过嵌套的try-catch块实现,允许在异常处理程序中引发新异常。嵌套的try-catch步骤如下:1.外部try-catch块处理所有异常,包括内部异常处理程序抛出的异常。2.内部try-catch块处理特定类型的异常,如果发生超出范围的异常,则将控制权交给外部异常处理程序。

PHP返回数组所有值,组成一个数组 PHP返回数组所有值,组成一个数组 Mar 21, 2024 am 09:06 AM

这篇文章将为大家详细讲解有关PHP返回数组所有值,组成一个数组,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。使用array_values()函数array_values()函数返回一个数组中所有值的数组。它不会保留原始数组的键。$array=["foo"=>"bar","baz"=>"qux"];$values=array_values($array);//$values将是["bar","qux"]使用循环可以使用循环手动获取数组的所有值并将其添加到一个新

Java Iterator 与 Iterable:迈入编写优雅代码的行列 Java Iterator 与 Iterable:迈入编写优雅代码的行列 Feb 19, 2024 pm 02:54 PM

Iterator接口Iterator接口是一个用于遍历集合的接口。它提供了几个方法,包括hasNext()、next()和remove()。hasNext()方法返回一个布尔值,指示集合中是否还有下一个元素。next()方法返回集合中的下一个元素,并将其从集合中删除。remove()方法从集合中删除当前元素。以下代码示例演示了如何使用Iterator接口来遍历集合:Listnames=Arrays.asList("John","Mary","Bob");Iterator

See all articles