免费注册 查看新帖 |

Chinaunix

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

如何遍历smarty中insert产生的数组? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-04 23:09 |只看该作者 |倒序浏览
做了一个insert产生的数组。只要是为了是动态的内容,不能被缓存才使用insert了。
如果在模版文件里面遍历这个输出结果呢?

insert函数返回的数组是这样的
Array
(
    [0] => Array
        (
            [id] => 224
            [folder_name] => 文件夹1
        )

    [1] => Array
        (
            [id] => 225
            [folder_name] => 文件夹2
        )

    [2] => Array
        (
            [id] => 226
            [folder_name] => 文件夹3
        )
)

模版文件怎么写呢?
{insert name="folder_list"}可以获得这个数组。显示是Array,但是具体怎么显示其中的内容呢?
我用foreach和section都没写对。

[ 本帖最后由 moonight 于 2008-10-4 23:11 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-10-05 15:40 |只看该作者
{insert name="folder_list" assign="folder_list"}
然后foreach或者section 这个folder_list

或者用第二种方法吧

register_block

论坛徽章:
0
3 [报告]
发表于 2008-10-05 21:00 |只看该作者
我如果仅仅写一个{insert name="folder_list"}页面显示Array。但是看不到内容。

能给下代码么?我尝试了下面的写法不能显示任何输出
{insert name="folder_list" assign="folder_list"}
<p>
{section name=folder loop=$folder_list}
        id: {$folder_list[folder].id}<br>
        name: {$folder_list[folder].folder_name}<br>
        <p>
{/section}



insert_folder_list()返回数组的内容如下
Array
(
    [0] => Array
        (
            [id] => 224
            [folder_name] => 文件夹1
        )

    [1] => Array
        (
            [id] => 225
            [folder_name] => 文件夹2
        )

    [2] => Array
        (
            [id] => 226
            [folder_name] => 文件夹3
        )

)

[ 本帖最后由 moonight 于 2008-10-5 21:19 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2008-10-05 21:46 |只看该作者
文档里面说{insert name="getBanner" lid=#banner_location_id# sid=#site_id#}
相当于访问函数insert_getBanner(array("lid" => "12345","sid" => "67890"));

怎么写代码在函数里面获得lid和sid的值呢?

论坛徽章:
0
5 [报告]
发表于 2008-10-06 13:25 |只看该作者
:wink:

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:55:28
6 [报告]
发表于 2008-10-06 14:21 |只看该作者
不行就让 insert_folder_list 直接生成遍历好格式化好的html代码吧。

论坛徽章:
0
7 [报告]
发表于 2008-10-06 16:05 |只看该作者
原帖由 xinglu1983 于 2008-10-6 14:21 发表
不行就让 insert_folder_list 直接生成遍历好格式化好的html代码吧。


我现在就是这么干的。不过感觉很不好。
这样php和web又搅和到一起了。虽然可以用一些办法隔离可是始终不是正途。

应该能够遍历insert的数据的。让web格式化就在web当中吧。

论坛徽章:
0
8 [报告]
发表于 2008-10-10 02:08 |只看该作者
做了一个insert产生的数组。只要是为了是动态的内容,不能被缓存才使用insert了。
如果在模版文件里面遍历这个输出结果呢?

insert函数返回的数组是这样的
Array
(
    [0] => Array
        (
            [id] => 224
            [folder_name] => 文件夹1
        )

    [1] => Array
        (
            [id] => 225
            [folder_name] => 文件夹2
        )

    [2] => Array
        (
            [id] => 226
            [folder_name] => 文件夹3
        )
)

模版文件怎么写呢?
{insert name="folder_list"}可以获得这个数组。显示是Array,但是具体怎么显示其中的内容呢?
我用foreach和section都没写对。



能给下代码么?我尝试了下面的写法不能显示任何输出
{insert name="folder_list" assign="folder_list"}
<p>
{section name=folder loop=$folder_list}
        id: {$folder_list[folder].id}<br>
        name: {$folder_list[folder].folder_name}<br>
        <p>
{/section}


不能输出是有缘故的,因为这种写法仅当 $smarty->caching = false; 才输出
说明看手册
If you supply the "assign" attribute, the output of the insert tag will be assigned to this template variable instead of being output to the template. NOTE: assigning the output to a template variable isn't too useful with caching enabled.
详细的看断点调试吧

手册的这种smarty_block_dynamic方法更灵活,实现的就是你想要的MV分离

index.php:

  1. require('Smarty.class.php');
  2. $smarty = new Smarty;
  3. $smarty->caching = true;

  4. function smarty_block_dynamic($param, $content, &$smarty) {
  5. return $content;
  6. }
  7. $smarty->register_block('dynamic', 'smarty_block_dynamic', false);

  8. $smarty->display('index.tpl');
复制代码


index.tpl:

  1. Page created: {"0"|date_format:"%D %H:%M:%S"}

  2. {dynamic}

  3. Now is: {"0"|date_format:"%D %H:%M:%S"}

  4. ... do other stuff ...

  5. {/dynamic}
复制代码




文档里面说{insert name="getBanner" lid=#banner_location_id# sid=#site_id#}
相当于访问函数insert_getBanner(array("lid" => "12345","sid" => "67890"));

怎么写代码在函数里面获得lid和sid的值呢?





不大清楚你说的代码指的是什么,按我的理解可以这么写:

模板里面index.html
{config_load file="foo.conf"}
{insert name="getBanner" lid=#banner_location_id# sid=#site_id#}

配置文件foo.conf
banner_location_id = 546
site_id = 12

php程序
function insert_getBanner($params)
{
        if($params["lid"]  && $params["sid"]) {
                //do something
        }
        return $result;
}
$smarty->display('index.html');

论坛徽章:
0
9 [报告]
发表于 2008-10-12 20:13 |只看该作者
smarty模板很好的说。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP