zoukankan      html  css  js  c++  java
  • [轉]完全掌握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 />

    申明

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

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

  • 相关阅读:
    Leetcode Spiral Matrix
    Leetcode Sqrt(x)
    Leetcode Pow(x,n)
    Leetcode Rotate Image
    Leetcode Multiply Strings
    Leetcode Length of Last Word
    Topcoder SRM 626 DIV2 SumOfPower
    Topcoder SRM 626 DIV2 FixedDiceGameDiv2
    Leetcode Largest Rectangle in Histogram
    Leetcode Set Matrix Zeroes
  • 原文地址:https://www.cnblogs.com/Athrun/p/1709524.html
Copyright © 2011-2022 走看看