|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
HTML中的任何元素都要亲自实践,只有明白了什么元素会起到什么效果之后,你才会记忆深刻,而一味的啃书,绝对是不行的,我想大部分新手之所以觉得概念难学,大部分是一个字“懒”,懒是阻止进步的最大敌人,所以克服掉懒的习惯,才能更快的学好一样东西。静态|模板 模板可以改良网站的布局。本文论述若何经由过程PHP 4的一个新功效和模板类,在由大批静态HTML页面组成的网站中奇妙地应用模板掌握页面结构。
提纲:
===================================
分别功效和结构
防止页面元素反复
静态网站的模板框架
===================================
分别功效和结构
起首咱们来看看使用模板的两个次要目标:
分别功效(PHP)和结构(HTML)
防止页面元素反复
第一个目标是议论得最多的目标,它假想的情况是:一组法式员编写用于生成页面内容的PHP剧本,同时另外一组设计人员设计HTML和图形以掌握页面的终究外不雅。分别功效和结构的根基思惟就是使得这两组人可以各自编写和利用自力的一组文件:法式员只需关怀那些只包括PHP代码的文件,无需关怀页面的外不雅;而页面设计人员可以用本人最熟习的可视化编纂器设计页面结构,无需忧虑损坏任何嵌入到页面的PHP代码。
假如你已经看过几个关于PHP模板的教程,那末你应当已分明模板的任务机制。思索一个复杂的页面部分:页面的上方是页头,右边是导航条,其他局部是内容区域。这类网站可以具有以下模板文件:
<!-- main.htm -->
<html>
<head><title>模板示例</title></head>
<body>
<table><tr><td>{HEADER}</td></tr>
<tr><td>{LEFTNAV}</td><td>{CONTENT}</td></tr>
</table>
</body></html>
<!-- header.htm -->
<img src=http://www.163design.net/p/c/"sitelogo.jpg">
<!-- leftnav.htm -->
<br><a href="foo">Foo</a>
<br><a href="bar">Bar</a>
可以看出页面若何由这些模板机关而成:main模板掌握着全部页面的结构;header模板和leftnav模板掌握着页面的公共元素。花括号“{}”外面的标识符是内容占位符。利用模板最次要的优点在于界面设计者可以依照本人的志愿编纂这些文件,好比设置字体、修正色彩和图形,或完整地改动页面的结构。界面设计者可以用任何通俗HTML编纂器或可视化东西编纂这些页面,由于这些文件都只包括HTML代码,没有任何PHP代码。
PHP代码全体保留到独自的文件中,这个文件也就是由页面URL实践挪用的文件。Web办事器经由过程PHP引擎解析该文件,然后把了局前往给阅读器。普通地,PHP代码老是静态地生成页面内容,好比查询数据库或履行某种盘算等。上面是一个例子:
<?php
// example.php
require('class.FastTemplate.php');
$tpl = new FastTemplate('.');
$tpl->define( array( 'main' => 'main.htm',
'header' => 'header.htm',
'leftnav' => 'leftnav.htm' ) );
// 此处的PHP代码设置$content使其包括适合的页面内容
$tpl->assign('CONTENT', $content);
$tpl->parse('HEADER', 'header');
$tpl->parse('LEFTNAV', 'leftnav');
$tpl->parse('MAIN', 'main');
$tpl->FastPrint('MAIN');
?>
这里咱们利用的是盛行的FastTemplate模板类,但其根基思绪关于其他很多模板类来讲都一样。起首你实例化一个类,告知它到哪里去寻觅模板文件和哪个模板文件与页面的哪局部对应;接上去是生成页面内容,把了局付与内容的标识符;然后,顺次解析各个模板文件,模板类将履行需要的交换操作;最初把解析了局输入到阅读器。
这个文件完整由PHP代码组成,不包括任何HTML代码,这是它最大的长处。如今,PHP法式员可以集中精神编写生成页面内容的代码,而不用为了若何生成HTML去准确地格局化终究页面而忧虑。
你可使用这类办法和下面的文件机关出一个完全的网站。假如PHP代码是以URL中的查询字符串为基本生成页面内容,例如http://www.foo.com/example.php?article=099,你可以据此机关出一个完全的杂志网站。
很轻易看出采取模板还有第二个优点。如上例所示,页面右边的导航条独自保留为一个文件,咱们只需编纂这一个模板文件就能够改动网站一切页面右边的导航条。
防止页面元素反复
“这的确不错”,你或许会想,“我的网站次要就是由大批的静态页面组成。如今我可以从一切页面中删除它们的公共局部,要更新这些公共局部其实太费事了。今后我就能够用模板制造出很轻易保护的一致页面结构。”但工作并不是这么复杂,“大批的静态页面”道出了成绩的地点。
请思索下面的例子。这个例籽实际上只要一个example.php页面,它之所以可以生成全部网站的一切页面,是由于它使用了URL中的查询字符串从数据库之类的信息源静态地机关出页面。
咱们当中的大多半人所运转的网站其实不必定都无数据库撑持。咱们的网站大多半由静态页面组成,然后用PHP在这里、那边加上一些静态功效,好比搜刮引擎、反应表单等。那末,若何在这类网站上使用模板呢?
最复杂的办法是为每个页面复制一份PHP文件,然后在每个页面中把PHP代码里代表内容的变量设置成适合的页面内容。例如,假定有三个页面,它们分离是主页(home)、关于(about)和产物(product),咱们可以用三个文件分离生成它们。这三个文件的内容都类如:
<?php
// home.php
require('class.FastTemplate.php');
$tpl = new FastTemplate('.');
$tpl->define( array( 'main' => 'main.htm',
'header' => 'header.htm',
'leftnav' => 'leftnav.htm' ) );
$content = "<p>接待会见</p>
<img src=http://www.163design.net/http://www.163design.net/p/c/"demo.jpg\">
<p>但愿你可以喜好本网站</p>";
$tpl->assign('CONTENT', $content);
$tpl->parse('HEADER', 'header');
$tpl->parse('LEFTNAV', 'leftnav');
$tpl->parse('MAIN', 'main');
$tpl->FastPrint('MAIN');
?>
明显,这类办法有三个成绩:咱们必需为每个页面复制这些庞杂的、牵扯到模板的PHP代码,这与反复公共页面元素一样使得页面难以保护;如今文件又夹杂了HTML和PHP代码;为内容变量赋值将变得十分坚苦,由于咱们必需处置好大批的特别字符。
处理这个成绩的关头就在于分别PHP代码和HTML内容,固然咱们不克不及从文件中删除一切的HTML内容,但可以移出绝大多半PHP代码。
静态网站的模板框架
起首,咱们象后面一样为一切的页面公用元素和页面全体结构编写模板文件;然后从一切的页面删除公共局部,只留下页面内容;接上去再在每一个页面中加上三行PHP代码,以下所示:
<?php
<!-- home.php -->
<?php require('prepend.php'); ?>
<?php pageStart('Home'); ?>
<h1>你好</h1>
<p>接待会见</p>
<img src=http://www.163design.net/p/c/"demo.jpg">
<p>但愿你可以喜好本网站</p>
<?php pageFinish(); ?>
?>
这类办法根基上处理了后面提到的各类成绩。如今文件里只要三行PHP代码,并且没有任何一行代码直接触及到模板,因而要修改这些代码的能够性极小。另外,因为HTML内容位于PHP标志以外,所以也不存在特别字符的处置成绩。咱们可以很轻易地将这三行PHP代码到场到一切静态HTML页面中。
require函数引入了一个PHP文件,这个文件包括了一切必须的与模板相干的PHP代码。个中pageStart函数设置模板对象和页面题目,pageFinish函数解析模板然后生成了局发送给阅读器。
这是若何完成的呢?为何在挪用pageFinish函数之前文件中的HTML不会发送给阅读器?谜底就在于PHP 4的一个新功效,这个功效答应把输入到阅读器的内容截获到缓冲区当中。让咱们来看看prepend.php的详细代码:
<?php
require('class.FastTemplate.php');
function pageStart($title = '') {
GLOBAL $tpl;
$tpl = new FastTemplate('.');
$tpl->define( array( 'main' => 'main.htm',
'header' => 'header.htm',
'leftnav'=> 'leftnav.htm' ) );
$tpl->assign('TITLE', $title);
ob_start();
}
function pageFinish() {
GLOBAL $tpl;
$content = ob_get_contents();
ob_end_clean();
$tpl->assign('CONTENT', $content);
$tpl->parse('HEADER', 'header');
$tpl->parse('LEFTNAV', 'leftnav');
$tpl->parse('MAIN', 'main');
$tpl->FastPrint('MAIN');
}
?>
pageStart函数起首创立并设置了一个模板实例,然后启用输入缓存。尔后,一切来自页面自己的HTML内容都将进入缓存。pageFinish函数掏出缓存中的内容,然后在模板对象中指定这些内容,最初解析模板并输入完成后的页面。
这就是全部模板框架全体的任务进程了。起首编写包括了网站各个页面公共元素的模板,然后从一切页面中删除全体公共的页面结构代码,代之以三行永久无需修改的PHP代码;再把FastTemplate类文件和prepend.php到场到包括途径,如许你就失掉了一个页面结构可以集中掌握的网站,它有着更好的牢靠性和可保护性,并且网站级的大局限修正也变得相当轻易。
本文下载包包括了一个可运转的示例网站,它的代码正文要比后面的代码正文更具体一些。FastTemplate类可以在http://www.thewebmasters.net/找到,最新的版本号是1.1.0,那边还有一个用于包管该类在PHP 4中准确运转的小补钉。本文下载代码中的类已经由该补钉的修改。
怎么培养啊 别光说不练啊,好 ,比如新人入门自己步是配置环境,虽然现在都有很多的集成环境,但是真实的体验下配置环境还是会有很多帮助,不论是你以后工作还是在真实的linux下开发。 |
|