分类广告


推荐文章

  • 没有找到任何内容!
您当前的位置:中国站长下载网络编程PHP专区 → 文章内容

模板,PHPLIB处理方式(二)

  • 作者:佚名    来源:不详    发布时间:2006-2-26 2:00:44
  • 字体大小:
作者/来源limodou





嵌套的模板

  parse
()函数的一个灵巧的特性是它创建的MyOutput句柄是一个真正的模板变量就象some_color 是一

个模板变量。所以如果你有另一个模板
它有一个{MyOutput}标签当你分析第二个模板时所有的

{MyOutput}标记将被替换为MyOutput中的分析后的文本。这个特性允许你将一个模板文件嵌入到另一个模板

中。所以
我们可能有另一个名为wholePage.ihtml的模板内容如下







对不起
你没赢。但是如果你赢了我们将对你说

{MyOutput}



  并且在wholePage
.ihtml被分析后最后的结果将是



对不起
你没赢。但是如果你赢了我们将对你说

祝贺
你赢了一辆新蓝色Honda Prelude



  下面是分析两个模板的PHP代码






--------------------------------------------------------------------------------



$t
= new Template("/home/mydir/mytemplates/");



// 这三行同第一个例子一样

$t->set_file("MyFileHandle","MyTemplate.ihtml");

$t->set_var("some_color",$my_color);

$t->parse("MyOutput","MyFileHandle");



// 注意我们没有调用p()

// 这里,仍然没有输出任何东西



// 现在分析第二个模板

$t->set_file("WholeHandle","wholePage.ihtml");



// wholePage.ihtml 有 "{MyOutput}" 在里面

$t->parse("MyFinalOutput","WholeHandle");



// 所有的 {MyOutput} 被替换了

$t->p("MyFinalOutput");

// 输出 MyFinalOutput 的值



?>--------------------------------------------------------------------------------

  最后调用了parse
()和p()的两行语句可以合并成一个简写函数pparse()



--------------------------------------------------------------------------------

pparse
("MyFinalOutput","SecondHandle");

?>

--------------------------------------------------------------------------------

  另一个PHPLIB模板的特性是set_file
()和set_var()函数也能一次接收多组值通过传递一个句柄/数组

对数组。这是一个例子






--------------------------------------------------------------------------------

$t
->set_file(array( "pageOneHandle" => "pageone.ihtml",

"pageTwoHandle" => "pagetwo.ihtml"));

$t
->set_var(array( "last_name" => "Gates",

"first_name" => "Bill",

"net_worth" => $reallybignumber));

?>

--------------------------------------------------------------------------------

添加模板文本

  你可以给parse
()和pparse()传递第三个参数如果你想给模板变量追加数据而不是替换它。可以简单

的使用true作为第三个参数调用parse
()和pparse()





--------------------------------------------------------------------------------

$t
->parse("MyOutput","MyFileHandle", true);

?>

--------------------------------------------------------------------------------

  如果MyOutput已经包含了数据
MyFileHandle将被分析并且被追加到MyOutput已经存在的数据上。这个

技术非常有用
如果你已经有了一个模板你想要同一段文本被重复多次例如列出一个数据库查询结果中

的多行。你也可能是显示数组中的变量
如下面的例子





--------------------------------------------------------------------------------

set_file
(array("mainpage" => "mainpage.ihtml", "each_element" => "each_element.ihtml"));reset($myArray);while (list($elementName, $elementValue) = each($myArray)) {

// 设置 'value' 和 'name' 为每一个元素的值和名字

$t->set_var("name",$elementName); $t->set_var("value",$elementValue);

// 追加each_element的拷贝

$t->parse("array_elements","each_element",true);}$t->pparse("output","mainpage");
?>--------------------------------------------------------------------------------

  这个例子使用了两个模板
mainpage.ihtml和each_element.ihtml。mainpage.ihtml模板可能是这样





Here is the
array:



{array_elements}





  上面的
{array_elements}标签将被each_element.ihtml的拷贝所替换它将根据数组($myArray)进行重

复。each_element
.ihtml模板看上去可能是









{name}: {value}





  处理结果是一个包含$myArray元素的格式化很好的表格。但是如果将两个模板合并成一个模板不是更好

实际上它们可以使用模板块来合并使用。模板块允许从一个模板中取出一块文本所以你可以重复很

多次
或者在它上面做任何你想做的事情。但是我将在另一篇文章讲述这个特性。
<