smarty 块函数文件的注译

 
 
// 函数中的$params代表标签中传入的参数的数组;变量 $content 的值取决于是否因开始标记或结束标 //记或结束标记调用你的函数。假如是开始标记,它会是空的,如果是结束标记,它会是模板块的内容。 //参数 &$repeat 通过参考引用传递给函数执行过程并为其提供一个可能值来控制显示块多少遍。默认情况下 //首次调用块函数(块开始标记)时变量 $repeat 是真,在随后的所有块函数调用中其始终是假。每当函数执行 //返回的 &$repeat 是真时,在{func} .. {/func}之间的内容再次求值,函数执行接收一个新块参数 $content //内容值被再次调用。 function smarty_block_products( $params , $content , & $smarty , & $repeat ) { global $db , $config ; // 仅仅是获取一个和当前block相对应的值而已 $l = count ( $smarty -> _tag_stack); // 指派变量名 if ( empty ( $params [ ' name ' ])) $params [ ' name ' ] = " products " ; // 判断是否是第一次运行(前半部标签),如果这个变量存在了,那么说明数据已经被注册进$smarty->blocvars[$l]里面了 //其中$smarty->blockvars是自定义的变量,smarty本身没有该属性,在smarty上面注册该变量的好处是, smarty每次都会默认以引用的方式进行传递,当然,如果你乐意,也可以使用$GLOBALS['blockvars'][$l] // if ( empty ( $smarty -> blockvars[ $l ])) { /* sql process */ $smarty -> blockvars[ $l ] = $db -> get_results( $sql ); // 如果没有数据,那就不用再执行了(repeat) if ( ! $smarty -> blockvars[ $l ]) return $repeat = false ; if ( ! empty ( $params [ ' pager ' ])) $smarty -> assign( $params [ ' pager ' ] , $pager ); } // 利用each的特点,逐一遍历$smarty->blockvars[$l]子元素 if ( list ( $key , $item ) = each ( $smarty -> blockvars[ $l ])) { $repeat = true ; // 重要的,指派变量,以供结束标签显示(下一次调用) $smarty -> assign( $params [ ' name ' ] , $item ); } else { $repeat = false ; // 清除each产生的指针记录,不解 reset ( $smarty -> blockvars[ $l ]); } // print 这里的$content其实是在上一次的运行中解析过(已经插入数据的最终结果)的$content,直接打印即可 if ( ! is_null ( $content )) print $content ; // 循环结束时,清理变量 if ( ! $repeat ) $smarty -> blockvars[ $l ] = array (); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Morven

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值