免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4880 | 回复: 4
打印 上一主题 下一主题

Smarty模板之section为何不能循环显示数组数据 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-07 17:19 |只看该作者 |倒序浏览
$row = array(
      '1'=>array(
          'id' => '1',
          'name' => '国内考试英语',
          'url' => 'category.php?id=1',
      ),
      '14'=>array(
            'id' => '14',
            'name' => '出国留学英语',
            'url' => 'category.php?id=14',
      ),
      '20'=>array(
            'id' => '20',
            'name' => '基础英语',
            'url' => 'category.php?id=20'
      )
);

$Smarty->assign('contacts', $row);

上面是php程序部分的关键代码,下面再附上模板中的代码:
{section name=cat loop=$contacts}
{$contacts[cat].id}: {$contacts[cat].name}<br>
{/section}

测试运行,结果如下:
: <br>
1: 国内考试英语<br>
: <br>

你看先输出一个空行,再输出第一条记录,其余的记录就不再输出了,这是为何?上面的数组是二维数组,应该符合要求啊,我改为foreach循环来测试,结果如图,你看完全正常,我在模板中是这样写的:
<ul>
  <!--{foreach from=$categories item=cat}-->
    <li>
      <span class="parent-cat"><A href="{$cat.url}">{$cat.name|escape:html}</A></span><br />
    </li>
  <!--{/foreach}-->
</ul>

完全一样的数组,应用于foreach循环和section循环结果却不同,这是为何?大家给指点一下,是不是我哪里写的不对?烦请指教正确的写法,如果是三维数组呢,正确的写法应该如何写才对?

1.JPG (7.22 KB, 下载次数: 39)

1.JPG

论坛徽章:
0
2 [报告]
发表于 2007-03-08 09:59 |只看该作者
你的数组是使用hash,个人不推荐用smarty轮换php的array key

论坛徽章:
0
3 [报告]
发表于 2007-03-08 11:14 |只看该作者
{section name=cat loop=$row.contacts}
{$row.contacts[cat].id}: {$row.contacts[cat].name}<br>
{/section}
试试行吗?

论坛徽章:
0
4 [报告]
发表于 2007-03-08 17:06 |只看该作者

把数组改成这样子就可以了

//把索引改成 0,1,2,而且必须是这样子, 要不出不来
$row = array(
      '0'=>array(
          'id' => '1',
          'name' => '国内考试英语',
          'url' => 'category.php?id=1',
      ),
      '1'=>array(
            'id' => '14',
            'name' => '出国留学英语',
            'url' => 'category.php?id=14',
      ),
      '2'=>array(
            'id' => '20',
            'name' => '基础英语',
            'url' => 'category.php?id=20'
      )
);

或是这样子:

$row = array(
         array(
          'id' => '1',
          'name' => '国内考试英语',
          'url' => 'category.php?id=1',
      ),
        array(
            'id' => '14',
            'name' => '出国留学英语',
            'url' => 'category.php?id=14',
      ),
       array(
            'id' => '20',
            'name' => '基础英语',
            'url' => 'category.php?id=20'
      )
);

丢给 section 的数组索引必须是从 0 开始的正整数,即 0, 1, 2, 3, ...。如果您的数组索引不是从 0 开始的正整数,那么就得改用 foreach 来呈现您的资料。您可以参考官方讨论区中的此篇讨论,其中探讨了 section 和 foreach 的用法。

[ 本帖最后由 cloudrainwind 于 2007-3-8 17:13 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2007-03-08 21:19 |只看该作者
先谢过各位了,我新增了一个数组,但测试时测来测去的总是不行,实在搞不定啊,烦请大家再予指点一二好吗?

先附上php程序代码:
   array(
         "id" => 1, "category_name" => "国内考试英语", "url" => "category.php?id=1",
         "children" => array(
              array(
                   "id" => 1, "topic_name" => "考研英语", "url" => "category.php?id=8"
                   ),
              array(
                   "id" => 2, "topic_name" => "中考英语", "url" => "category.php?id=6"
                   ),
              array(
                   "id" => 3, "topic_name" => "专业四级", "url" => "category.php?id=4"
                   ),
                   "topic" => array(
                        array(
                             "id" => 1, "cat_name" => "中国人民", "url" => "category.php?id=8"
                        ),
                        array(
                             "id" => 2, "cat_name" => "德国人民", "url" => "category.php?id=8"
                        ),
                        array(
                             "id" => 3, "cat_name" => "英国人民", "url" => "category.php?id=8"
                        )
                   )
             )
     ),
     array(
         "id" => 2, "category_name" => "出国留学英语", "url" => "category.php?id=14",
         "children" => array(
              array(
                   "id" => 4, "topic_name" => "出国留学", "url" => "category.php?id=18"
                   ),
              array(
                   "id" => 5, "topic_name" => "留学回国", "url" => "category.php?id=16"
                   ),
              array(
                   "id" => 6, "topic_name" => "留学申请", "url" => "category.php?id=19"
                   )
              )
        )
   );

再附上模板部分代码:
{section name=sec1 loop=$forum}
  <tr>
  <td colspan="2"><{$forum[sec1].category_name}></td>
 </tr>
{section name=sec2 loop=$forum[sec1].children}
 <tr>
  <td width="25"> </td>
  <td width="164"><{$forum[sec1].children[sec2].topic_name}></td>
 </tr>
{/section}
{section name=sec3 loop=$forum[sec1].topic}
 <tr>
  <td width="35"> </td>
  <td width="164"><{$forum[sec1].topic[sec3].cat_name}></td>
 </tr>
{/section}
{/section}

测试时别的都正常,就是<{$forum[sec1].topic[sec3].cat_name}>这处无法成功赋值,但打开Smarty的debug模式,值是有的,问题是模板部分没有成功赋值,改来改去的就是无法搞定,头都改痛了,恳请大家再给指点一二好吗?多谢了,问题就出在这个模板赋值部分。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP