首页 » 建站技术 » PHP 技术 » 浏览内容

菜鸟之phpwind模板技术的研究


2007-09-08 09:25:35 1,476 0 发表评论 字体: 作者:C.K.
标签: phpwind模板

体验版 88 元,个人版 128 元,多用户版 288元个人版160元升级到多用户版。

模板技术是用来分离HTML表示代码和PHP应用逻辑代码的一种手段,是一种MVC技术的实现方式。这种方式便于对于界面进行修改,设计和美化。同时使专业美工和编程人员进行多人协作的网页创作具备了分工的条件,也便于对代码进行维护。

传统的ASP和PHP网页设计,是把ASP代码嵌入到HTML内容中,这样设计比较灵活,执行速度比较快。但是HTML内容和服务器端脚本混合,不便于进行界面美化和修改,使用可视化的HTML编辑器修改网页的时候,非常容易造成代码被误删除的后果,需要非常小心。

众所周知,PHP在模板技术方面比ASP具有比较大的优势,不仅具备PHPLib template的标准模板,可以实现选择性显示和区块循环显示。另外,还可以使用FastTemplate和Smarty等多种模板技术,其中Smarty模板使用动态生成PHP缓存文件的技术来解决因为引进了模板而导致的性能下降的问题。

但是,使用这些纯正的动态模板技术,毕竟还是会带来一下性能的下降。即使使用了Smarty模板技术,在首次执行的时候会因为生成缓存代码,反而比PHPLib会稍慢一点,但再次访问的时候就不需要生成模板文件了,可以直接执行生成的PHP缓存文件,速度会和使用heredoc一样。这对于一些文章发布系统来说,已经够用了。因为一般的文章系统修改和更新不会太快,文章排序不太频繁。

也许正是因为这个原因,主流的论坛系统和大多数文章系统都没有采用这种成熟的动态模板方式,他们大多数考虑使用静态模板技术,或者静态直接生成PHP文件,或者干脆生成静态HTML,这就大大减少了反复动态生成模板的工作量。

但是对于内容更新速度很快,排序反复进行的高流量论坛来说,可能是考虑到效率原因(对于论坛来说,直接生成HTML似乎效率不会太高),他们大多数都采用了叫做Heredoc的模板技术。

所谓Heredoc技术,在正规的PHP文档中和技术书籍中一般没有详细讲述,只是提到了这是一种Perl风格的字符串输出技术。但是现在的一些论坛程序,和部分文章系统,都巧妙的使用heredoc技术,来部分的实现了界面与代码的准分离,phpwind就是一个典型的例子。

在PHP的文档中,只是提到了echo可以使用如下命令输出多行字符串(而且其中的变量被自动替换):

echo <<<END
  • This uses the "here document" syntax to output
  • multiple lines with $variable interpolation. Note
  • that the here document terminator must appear on a
  • line with just a semicolon. no extra whitespace!
  • END;
  • 上面的END结束符可以自己规定,在Phpwind,使用了“EOT”来结束。但是需要注意的是,这个END必须是在一行的开头才能有效,这其实是Heredoc技术的一个局限性(因为heredoc可以自定义结束符,所以引入了这个问题),在下面会提到。

    phpwind的模板文件一般存放在templatewind目录下面,在BBS目录中,使用require语句包含这个模板文件。其实这个模板文件是作为对应的PHP文件的一部分执行的,所以就不需要像PHPLib Template那样需要进行模板解析,然后再执行的过程。

    为了让heredoc的内容能被DreamWeaver这样的编辑器正确识别,以实现“所见即所得的”的网页设计,需要在heredoc中增加注释,示例文件如下:

    <!--
  • <?php
  •     print <<<EOT
  • -->
  • <html>
  • <head>
  • <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  • <title>Untitled Document</title>
  • </head>
  • <body>
  • <!--
  •     $name = '浅水游';
  •     print <<<EOT
  • -->
  •     Hello,$name!
  • <!--
  • EOT
  •     print <<<EOT
  • -->
  • </body>
  • </html>
  • <!--
  • EOT;
  • ?>
  • -->
  • 这样的模板文件,其实就是一个标准的,可以执行的PHP文件。但是,这样的PHP文件,其HTML样式在DreamWeaver中可以正确的显示出来,所有的PHP代码会被看做HTML注释,而且在输出的时候,不会输出出来。比如,上面的文件在DreamWeaver中,被显示成:

    Hello,$name!
    这样,在设计页面的时候,我们就可以借助DW的可视化界面,进行一些界面的修改,美化等工作。尽管没有实现完全的代码和HTML的分离,但至少提供了一种辅助性的设计手段。

    另:

    只要包函<??>PHP便会去解释他例   如你这样  
  •  <!--<?php   printf<<<EOT  
  •  Hello,World!!  
  •  EOT;?>//-->  
  •  这样你执行解释后的便会只剩下Hello,World但是网页上是看不到了成为  
  •  <!--  
  •  Hello,World!!  
  •  //-->  
  •  可见PHP解释器以经动作了,所以别被注释搞糊涂了只要遇到<?php   ?>标记PHP便会解释
  • 由于要让解释后的源码可见故变成

     <!--<?php   printf<<<EOT  
  •  //-->  
  •  Hello,World!!  
  •  <?php  
  •  EOT;?>//-->

    网站统计 Statistics

    • 创建时间: 2005年1月3日 距今5092 天
    • 日志总数: 2461
    • 评论总数: 630
    • 标签总数: 654
    • 链接总数: 273
    • 最后更新: 2018-8-31 17:57:04
    • 您是本站第 14264177 位访客

    广告区 Guǎng Gào