SpeedPHP技术交流论坛

 找回密码
 论坛注册

用新浪微博连接

一步搞定

QQ登录

只需一步,快速开始

查看: 1788|回复: 13

有关smarty的循环输出数组的问题[已解决] [复制链接]

Rank: 6Rank: 6

发表于 2010-8-28 17:42:16 |显示全部楼层
查询结果dump出来如下:
  1. Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [cp_id] => 40
  6.             [accouts] => 10000
  7.             [cp_name] => 豆瓣鲫鱼
  8.             [cp_yongl] => 肉片 豆腐卷
  9.             [cp_tiaol] =>
  10.             [cp_jiag] => 120
  11.             [cp_zhek] => 8.8
  12.             [cp_huiyuanjia] => 105
  13.             [cp_jies] => <p style="text-align: center">
  14.         <img height="360" id="imgb" src="/user_img/200905/20/BA12522787_short_1509052000662_20090520123704.jpg" width="420" /></p>
  15. <hr />

  16.             [check_yes] => 0
  17.             [crDate] => 2010-08-25 14:15:14
  18.             [modDate] => 2010-08-26 22:07:00
  19.             [at_date] => 2010-11-24 20:15:14
  20.             [delete_is] => 0
  21.             [cplist_album] => Array
  22.                 (
  23.                     [0] => Array
  24.                         (
  25.                             [pic_id] => 1
  26.                             [cp_id] => 40
  27.                             [picture] => no.jpg
  28.                         )

  29.                     [1] => Array
  30.                         (
  31.                             [pic_id] => 2
  32.                             [cp_id] => 40
  33.                             [picture] =>no.jpg
  34.                         )

  35.                     [2] => Array
  36.                         (
  37.                             [pic_id] => 5
  38.                             [cp_id] => 40
  39.                             [picture] => no.jpg
  40.                         )

  41.                 )

  42.         )
复制代码
模板部分如何用取得[picture]的值并用section输出?(不明白如何取得多维数组的键值)

Rank: 6Rank: 6

宝贵意见

发表于 2010-8-28 19:01:31 |显示全部楼层
<{foreach from=$arry item=item1}>
<{foreach from=$item1 item=item2}>
<{foreach from=$item2 item=item3}>
<{/foreach}
<{/foreach}
<{/foreach}

看了smraty编译模板后的文件,section 比foreach 复杂的多,所以能用foreach 尽量用foreach

Rank: 6Rank: 6

发表于 2010-8-28 19:19:51 |显示全部楼层
回复 2# azwl


    不能用foreach了,因为上面还有一层foreach呢,如果嵌套foreach的话会输出空白页面的。

管理员

@speedphp

Rank: 9Rank: 9Rank: 9

发表于 2010-8-28 19:29:25 |显示全部楼层
不能用foreach了,因为上面还有一层foreach呢,如果嵌套foreach的话会输出空白页面的。 ...
prince 发表于 2010-8-28 19:19


foreach嵌套多少层都是可以的,空白页面就是smarty的语法出错。看看foreach的闭合其他的地方有无错误。

按照你的数据来看,显示的方式大致如下:


<{foreach from=$results item=oneresult}>
名称是:<{$oneresult.cp_name}><br />
相册:
<{foreach from=$oneresult.cplist_album item=onealbum}>
<{$onealbum.piture}><br />
<{/foreach}>
<{/foreach}>


PS:还是老规则,先用上面代码作为模板试试,然后再加入自己的代码。

Rank: 6Rank: 6

发表于 2010-8-28 20:51:44 |显示全部楼层
回复 4# jake


    再看了下smarty手册里的,确实可以嵌套,但前提是:foreach 可以嵌套,但必须保证嵌套中的 foreach 名称唯一.
    之前我的foreach名称应该是重复了,所以输出空白页面。
我把模板里的嵌套按您说的改为:
  1. <{foreach from=$results item=id}>
  2. <tr style="background-color:#CCCCCC">
  3.     <td><{$id.cp_id}></td>
  4.     <td><{$id.cp_name}></td>
  5.     <td>
  6.             <div>
  7.            <ul>
  8.                     <{foreach from=$oneresult.cplist_album item=$onealbum}>
  9.                     <li><{$onealbum.picture}></li>
  10.                 <{/foreach}>
  11.            </ul>
  12.         </div>
  13.     </td>
  14.     <td><{$id.crDate}></td>
  15.     <td><{$id.at_date}></td>
  16.     <td><{$id.modDate}></td>
  17.     <td>
  18.             <a href="<{spUrl c=modify a=modCpin cp_id=$id.cp_id}>" target="_self";>
  19.         <span>修改</span></a>
  20.         &nbsp;&nbsp;&nbsp;&nbsp;
  21.         <a href="<{spUrl c=modify a=delCpin cp_id=$id.cp_id}>" target="_self"; onclick="return confirm('真的要删除?')";>
  22.         <span>删除</span></a>
  23.      </td>
  24. </tr>
  25. <{/foreach}>
复制代码
运行后有提示出错:Parse error: syntax error, unexpected T_ENDFOREACH in E:\special\www\speedphp\client\tmp\%%DF^DFA^DFA37647%%cpinGL.html.php on line 67
看了下编译生成的文件的67行是第二个foreach的结束符,它的前面没有对应的foreach开始标记,但检查模板里的foreach开始结束都对得上的,不知何故?

Rank: 6Rank: 6

宝贵意见

发表于 2010-8-28 23:21:51 |显示全部楼层
看看中间那个循环变量!!!
按你的写法要么
第一句应为:<{foreach from=$result item=oneresult}>

要么中间循环为<{foreach from=$id.cplist_album item=onealbum}>

管理员

@speedphp

Rank: 9Rank: 9Rank: 9

发表于 2010-8-29 10:09:59 |显示全部楼层
回复  jake


    再看了下smarty手册里的,确实可以嵌套,但前提是:foreach 可以嵌套,但必须保证嵌套中 ...
prince 发表于 2010-8-28 20:51


我的错,写错了item这个,很多时候这个地方都容易出错的。

<{foreach from=$oneresult.cplist_album item=$onealbum}>


应该是


<{foreach from=$oneresult.cplist_album item=onealbum}>

Rank: 6Rank: 6

发表于 2010-8-29 17:01:45 |显示全部楼层
谢谢楼上二位的帮助,但这样都无法获取到picture键的值,搜了下有关smarty输出四维数组的文章参照,还是解决不了

Rank: 6Rank: 6

发表于 2010-8-29 17:38:36 |显示全部楼层
摸了好久,终于弄清楚了!控制器和模板都要做一下修改
控制器做如下修改:
  1. $this -> results = $cpList -> spLinker() -> spPager($this -> spArgs('page', 1), 10) -> findAll($conditions);//按条件查找所有符合条件的记录,这行也需要用一个"spLinker()"的,否则对应表的数据不包含在$results里,这点我还不太明白,请大家指点!
  2. $this-> pager = $cpList -> spPager() -> getPager();//分页,这里这个spLinker()还有没有必要留着?因为数据不够多所以看不到效果,请指点迷津
  3. $this -> display("cpinGL.html");
复制代码
最终模板如下:
  1. <{foreach from=$results item=id}>
  2. <tr style="background-color:#CCCCCC">
  3.     <td><{$id.cp_id}></td>
  4.     <td><{$id.cp_name}></td>
  5.     <td>
  6.             <div><ul>
  7.         <{foreach from=$id.cplist_album item=one}>
  8.                                                    <li><{$one.picture}></li>
  9.         <{/foreach}></ul></div>
  10.     </td>
  11.     <td><{$id.crDate}></td>
  12.     <td><{$id.at_date}></td>
  13.     <td><{$id.modDate}></td>
  14.     <td>
  15.             <a href="<{spUrl c=modify a=modCpin cp_id=$id.cp_id}>" target="_self";>
  16.         <span>修改</span></a>
  17.         &nbsp;&nbsp;&nbsp;&nbsp;
  18.         <a href="<{spUrl c=modify a=delCpin cp_id=$id.cp_id}>" target="_self"; onclick="return confirm('真的要删除?')";>
  19.         <span>删除</span></a>
  20.      </td>
  21. </tr>
  22. <{/foreach}>
复制代码
关键是foreach能这样用:from=$id.cplist_album,所以真的很方便.
另外,我可能表达得不好,请勿见怪!

Rank: 6Rank: 6

发表于 2010-9-5 22:06:38 |显示全部楼层
dump出来结果
Array
(
    [0] => Array
        (
            [id] => 1
            [user] => 3423
            [tile] => 32432
            [cont] => 23423
            [fg] => 324234
        )

    [1] => Array
        (
            [id] => 2
            [user] => 3423
            [tile] => 32432
            [cont] => 23423
            [fg] => 324234
        )

    [2] => Array
        (
            [id] => 3
            [user] => 3423
            [tile] => 32432
            [cont] => 23423
            [fg] => 324234
        )

)

<table width="713" border="0">
  <tr>
    <td width="108">标题</td>
    <td width="459">内容</td>
    <td width="77">发言人</td>
    <td width="41">管理</td>
  </tr>
<{foreach from=$aa item=one}>
<tr>
    <td><{ $one.tile }></td>
    <td><{ $one.cont  }></td>
    <td><{ $one.user }></td>
    <td><p><a href="<{ spUrl c=reg a=del id=$one.id }>">删除</a></p>
    <p><a href="<{ spUrl c=reg a=up id=$one.id }>">更新</a></p></td>
  </tr>
  <{/foreach }>
</table>
不显示,是什么原因,function show()
{
        $liuyan=spClass("liuyan");
        $sql="select * from liuyan";
        $this->$aa=$liuyan->findsql($sql);
        dump($this->$aa);
        //$this->$results=$sp->findAll();
        $this->display("default/index.html");
        }
您需要登录后才可以回帖 登录 | 论坛注册

Archiver|SpeedPHP.com ( 粤ICP备08008671号 )  

GMT+8, 2012-2-7 01:24

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部