• [轉]完全掌握Smarty的Section用法


    轉自:http://blog.sina.com.cn/s/blog_4a6b3b2101000b8y.html

    参考了smarty的官方文档,不过是翻译了部分,也加了点注释,个人感觉是比较有用的。欢迎交流。

    1、循环一个简单的一维数组:
    Example 7-30. Looping a simple array with {section}

    <?php
        $data = array(1000,1001,1002);
        $smarty->assign('custid',$data);
    ?>

    //customer和下面的foo可以随便命名,作用其实仅仅是一个index下标,用来引用数组中的元素
    {section name=customer loop=$custid}    
      id: {$custid[customer]}<br />
    {/section}
    <hr />

    {section name=foo loop=$custid step=-1}
      {$custid[foo]}<br />
    {/section}

    //输出
    id: 1000<br />
    id: 1001<br />
    id: 1002<br />
    <hr />
    id: 1002<br />
    id: 1001<br />
    id: 1000<br />

    2、不用assign数组直接在smarty中循环:
    Example 7-31. {section} without an assigned array

    //特别地设置了start,step属性用来控制循环
    //$smarty.section.section的名字.index是一个特殊变量,用来显示当前循环的位置
    {section name=foo start=10 loop=20 step=2}
      {$smarty.section.foo.index}
    {/section}
    <hr />
    {section name=bar loop=21 max=6 step=-2}
      {$smarty.section.bar.index}
    {/section}

    //输出:
    10 12 14 16 18
    <hr />
    20 18 16 14 12 10

    3、section的name的值是随你定的
    Example 7-32. Naming a {section}

    {section name=anything loop=$myArray}
      {$myArray[anything].foo}
      {$name[anything]}     //这种用法目前还没怎么用过,也不太清楚
      {$address[anything].bar}    //这种也是
    {/section}

    4、遍历一个关联数组,嵌套的数组

    <?php
    $data = array(
              array('name' => 'John Smith', 'home' => '555-555-5555',
                    'cell' => '666-555-5555', 'email' => 'john@myexample.com'),
              array('name' => 'Jack Jones', 'home' => '777-555-5555',
                    'cell' => '888-555-5555', 'email' => 'jack@myexample.com'),
              array('name' => 'Jane Munson', 'home' => '000-555-5555',
                    'cell' => '123456', 'email' => 'jane@myexample.com')
            );
    $smarty->assign('contacts',$data);
    ?>

    //section不用嵌套,因为只有一个数组,数组内部用$contacts[customer]得到
    //每个数组,再用.键名来得到键值
    {section name=customer loop=$contacts}
    <p>
      name: {$contacts[customer].name}<br />
      home: {$contacts[customer].home}<br />
      cell: {$contacts[customer].cell}<br />
      e-mail: {$contacts[customer].email}
    </p>
    {/section}

    The above example will output:

    <p>
      name: John Smith<br />
      home: 555-555-5555<br />
      cell: 666-555-5555<br />
      e-mail: john@myexample.com
    </p>
    <p>
      name: Jack Jones<br />
      home phone: 777-555-5555<br />
      cell phone: 888-555-5555<br />
      e-mail: jack@myexample.com
    </p>
    <p>
      name: Jane Munson<br />
      home phone: 000-555-5555<br />
      cell phone: 123456<br />
      e-mail: jane@myexample.com
    </p>
    5、从数据库查询记录显示,实际上是显示二维数组,其实同上例一样
    <?php
    $sql = 'select id, name, home, cell, email from contacts '
          ."where name like '$foo%' ";
    $smarty->assign('contacts', $db->getAll($sql));
    ?>

    //结果:

    <table>
    <tr><th>&nbsp;</th><th>Name></th><th>Home</th><th>Cell</th><th>Email</th></tr>
    {section name=co loop=$contacts}     //第一维
      <tr>
        <td><a href="view.php?id={$contacts[co].id}">view<a></td>   //第二维用.号来引用
        <td>{$contacts[co].name}</td>
        <td>{$contacts[co].home}</td>
        <td>{$contacts[co].cell}</td>
        <td>{$contacts[co].email}</td>
      <tr>
    {sectionelse}
      <tr><td colspan="5">No items found</td></tr>
    {/section}
    </table>

    6、嵌套的section
    <?php

    $id = array(1001,1002,1003);
    $smarty->assign('custid',$id);

    $fullnames = array('John Smith','Jack Jones','Jane Munson');
    $smarty->assign('name',$fullnames);

    $addr = array('253 N 45th', '417 Mulberry ln', '5605 apple st');
    $smarty->assign('address',$addr);

    $types = array(
               array( 'home phone', 'cell phone', 'e-mail'),
               array( 'home phone', 'web'),
               array( 'cell phone')
             );
    $smarty->assign('contact_type', $types);

    $info = array(
               array('555-555-5555', '666-555-5555', 'john@myexample.com'),
               array( '123-456-4', 'www.example.com'),
               array( '0457878')
            );
    $smarty->assign('contact_info', $info);

    ?>

    {section name=customer loop=$custid}
    <hr>
      id: {$custid[customer]}<br />
      name: {$name[customer]}<br />
      address: {$address[customer]}<br />
      {section name=contact loop=$contact_type[customer]}
        {$contact_type[customer][contact]}: {$contact_info[customer][contact]}<br />
      {/section}
    {/section}

    The above example will output:

    <hr>
      id: 1000<br />
      name: John Smith<br />
      address: 253 N 45th<br />
        home phone: 555-555-5555<br />
        cell phone: 666-555-5555<br />
        e-mail: john@myexample.com<br />
    <hr>
      id: 1001<br />
      name: Jack Jones<br />
      address: 417 Mulberry ln<br />
        home phone: 123-456-4<br />
        web: www.example.com<br />
    <hr>
      id: 1002<br />
      name: Jane Munson<br />
      address: 5605 apple st<br />
        cell phone: 0457878<br />

    申明

    非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

    博文欢迎转载,但请给出原文连接。

  • 相关阅读:
    Maven命令行使用:mvn clean package(打包)
    快速构建 Spring Boot 应用
    Spring MVC 表单处理
    Spring Web Hello World 例子
    Spring 事务管理
    开发环境搭建
    考研计算机专业课练习题
    考研计算机自测练习
    考研计算机自测练习答案
    考研计算机专业常见术语
  • 原文地址:https://www.cnblogs.com/Athrun/p/1709524.html
Copyright © 2020-2023  润新知