变相怪杰 发表于 2015-2-4 00:16:41

PHP教程之用PHP制造静态网站的模板框架

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下开发。

小女巫 发表于 2015-2-4 10:42:47

本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。

分手快乐 发表于 2015-2-6 14:05:46

对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。

愤怒的大鸟 发表于 2015-2-9 20:46:11

如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,

小魔女 发表于 2015-2-17 17:42:57

建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。

若相依 发表于 2015-3-5 21:34:15

你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。

蒙在股里 发表于 2015-3-12 15:22:25

在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。

爱飞 发表于 2015-3-19 02:22:01

如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,

变相怪杰 发表于 2015-3-27 00:09:34

本文当是我的笔记啦,遇到的问题随时填充

灵魂腐蚀 发表于 2015-4-6 03:11:48

写的比较杂,因为我也是个新手,不当至于大家多多指正。

再现理想 发表于 2015-4-11 01:13:05

为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。

不帅 发表于 2015-4-15 23:16:28

在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、

乐观 发表于 2015-4-30 13:43:56

爱上php,他也会爱上你。

柔情似水 发表于 2015-6-3 23:36:36

作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。

山那边是海 发表于 2015-6-12 19:41:33

建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。

因胸联盟 发表于 2015-6-21 00:21:29

当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,

老尸 发表于 2015-6-21 20:04:32

基础有没有对学习php没有太大区别,关键是兴趣。

精灵巫婆 发表于 2015-6-22 00:40:59

兴趣是最好的老师,百度是最好的词典。

冷月葬花魂 发表于 2015-6-23 02:38:23

使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的

谁可相欹 发表于 2015-7-10 13:40:28

你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
页: [1]
查看完整版本: PHP教程之用PHP制造静态网站的模板框架