要求:
用php输出一个数组,物理输出其中的一个元素。
数组名:$arr,内容:'abc','bcd','cde'
方案:
out.tpl
-
This is a test File
-
{{ BEGIN name }} {{ $xm }} ssss
-
{{ END }}
-
-
This is The
out.php
-
<?php
-
-
$tp = new Blitz('./out.tpl');
-
$tp->display(array(
-
'name'=>array(
-
array('xm'=>'abc'),
-
array('xm'=>'bcd'),
-
array('xm'=>'cde')
-
)));
-
-
?>
问题:
本来感觉应该直接输出$arr=array('abc','bcd','cde')就可以了,为什么弄出来一个三维数组呢?
分析:
先来看著名的smarty是怎么做的呢?
tpl文件:
-
{$abc}<br>
-
{section name=test loop=$arr}
-
<p>The number is {$arr[test]} ! </p>
-
{/section}
php文件:
-
for( $i=0; $i < 50; $i++ ) {
-
$arr[] = $i;
-
}
首先要告诉模板,要循环的这个变量名是什么,在上例中,变量名叫arr,然后还要告诉模板,对哪些量进行循环,smarty只是把整个数组进行循环,不管数组key是什么。所以只要有一维数组就够了。
而blitz则不然,它要了解两件事情才开始循环:(1)循环的变量名,在blitz中叫做block;(2)对哪些key,也就是索引进行循环。
看起来有些复杂,但是这个思维却比较容易地解决了一个问题:在循环的内容也是一个数组的情况。
对于smarty,二维数组就显得有点复杂了,要用句号“.”来进行下一级变量的引用,但这对于blitz来说,跟一维的数组一样,不需要添加成本,简单地加个同级的key就行了。
并且这样做还有一个好处,就是如果遇到需要判断一个条件的时候,可以添加一个新的key值来进行判断。
问题:
Blitz最大的短板在于不能按条件进行判断,比如if ($num=5),这种判断目前还不能实现,不过作者表态,已经考虑添加简单的运算支持。
总结:用blitz,就要习惯它的三维数组,不过不用担心,四维好像也用不上。
提示:
在传递给blitz的数组中,第一维的元素个数,决定了
“整篇文档”的重复次数。如下所示,你认为最终应该输出什么呢?
tpl:
-
This is a test File
-
{{ BEGIN test }} {{ $id }} : id
-
{{ END test }}
-
{{ BEGIN name }} {{ $xm }} ssss
-
{{ END name }}
-
-
This is The
php,注意给blitz的是两个元素的数组:
-
<?php
-
$tp = new Blitz('./test.tpl');
-
-
$arr[]= array('name'=>array(array('xm'=>'abc'),array('xm'=>'bcd'),array('xm'=>'cde'))) ;
-
$arr[]= array('test'=>array(array('id'=>1),array('id'=>2),array('id'=>3))) ;
-
$tp->set($arr);
-
-
$tp->display();
-
?>
运行结果是:
-
This is a test File
-
abc ssss
-
bcd ssss
-
cde ssss
-
-
This is The
-
This is a test File
-
1 : id
-
2 : id
-
3 : id
-
-
This is The
把php文件稍加改进,就变成别外一个结果了,注意添加了$arr[0],强制两个数组变为一维中的一个元素:
-
<?php
-
$tp = new Blitz('./test.tpl');
-
$arr[0]['name']= array(array('xm'=>'abc'),array('xm'=>'bcd'),array('xm'=>'cde')) ;
-
$arr[0]['test']= array(array('id'=>1),array('id'=>2),array('id'=>3)) ;
-
$tp->set($arr);
-
$tp->display();
-
?>
-
This is a test File
-
1 : id
-
2 : id
-
3 : id
-
abc ssss
-
bcd ssss
-
cde ssss
-
-
This is The
--end--
阅读(1756) | 评论(0) | 转发(0) |