Template类实现HTML和PHP代码分离 阳飞.docx

上传人:b****6 文档编号:8496536 上传时间:2023-01-31 格式:DOCX 页数:26 大小:35.44KB
下载 相关 举报
Template类实现HTML和PHP代码分离 阳飞.docx_第1页
第1页 / 共26页
Template类实现HTML和PHP代码分离 阳飞.docx_第2页
第2页 / 共26页
Template类实现HTML和PHP代码分离 阳飞.docx_第3页
第3页 / 共26页
Template类实现HTML和PHP代码分离 阳飞.docx_第4页
第4页 / 共26页
Template类实现HTML和PHP代码分离 阳飞.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

Template类实现HTML和PHP代码分离 阳飞.docx

《Template类实现HTML和PHP代码分离 阳飞.docx》由会员分享,可在线阅读,更多相关《Template类实现HTML和PHP代码分离 阳飞.docx(26页珍藏版)》请在冰豆网上搜索。

Template类实现HTML和PHP代码分离 阳飞.docx

Template类实现HTML和PHP代码分离阳飞

使用PHP4中的IntegratedTemplate类实现HTML和PHP代码分离

作者:

jacklondon 

 

       使用PHP编程的人都会碰到这样一个问题:

当PHP代码和HTML代码在一起的时候,看PHP代码很费劲,整个文件也无法用Dreamweaver来编辑,这对于PHP程序员和美工来讲,修改这样的文件就象一个噩梦。

   PHP中的模板(Template)技术就是为了解决这个问题而出现的。

PHP模板类有很多,比较常见的是FastTemplate和PHPLib,因为出现得早,在PHP编程界名声很大。

PHP程序员不知道这两个类,就象VB程序员不知道MsgBox函数一样,是一件不可思议的事情。

   以前我们需要去下载PHP模板类,现在PHP4有了自己的模板类IntegratedTemplate和IntegratedTemplateExtension,功能和PHPLib差不多。

这两个类是子类和父类的关系。

一般我们用IntegratedTemplateExtension就可以了。

让人感到不可思议的是IntegratedTemplate不是从PEAR类继承过来,无法用到PEAR类的debug功能。

   以下举例子说明它们的用法,假设IntegratedTemplate类和IntegratedTemplateExtension类分别在C:

\php4\pear\HTML\ITX.php和C:

\php4\pear\HTML\ITX.php中。

我们写的代码放在C:

\TestPHP\PHP4\Welcome.htm和C:

\TestPHP\HTML\Welcome.php中。

将C:

\TestPHP\PHP4在WebServer上设成虚拟目录/testphp并且给与脚本执行权限,确认C:

\TestPHP\HTML\Welcome.htm无法通过远端浏览器访问。

在php.ini里面设置include_path=\".;C:

\php4\pear\"

   例1:

   我们在HTML文件中放置变量的标记,用PHP代码设置变量的值,然后将HTML中的标记替换掉,最后输出到客户浏览器。

   以下是Welcome.htm代码,我们放了三个PHPtag(变量标记)为:

{WelcomeTitle}、{UserName}、{WelcomeMessage}

       

       

       {WelcomeTitle}

       

       

       

--

       body,p,br,div,td,table{ font-size:

9pt}

       -->

       

       

       

       

       您好,{UserName}

       {WelcomeMessage}

       

       

   以下是Welcome.php代码

       

php

       require_once\"HTML/ITX.php\";

        

       //以下是给变量赋值,在实际代码中可能从Database中取得数据然后赋值

       $WelcomeTitle=\"欢迎来到网页天堂\";

       $UserName=\"皮皮鲁\";

       $WelcomeMessage=\"您的到来让我们深感荣幸!

\";

        

       //一般来说这种全局变量放在单独的一个文件中,便于维护

       $HTML_CODE_FILE_ROOT=\"../HTML/\";

       

       $tpl=newIntegratedTemplateExtension($HTML_CODE_FILE_ROOT);

        

       指定要替换tag的HTML文件

       $tpl->loadTemplatefile(\"Welcome.htm\");

       

       替换HTML文件中的tag

       $tpl->setVariable(array(

           \"WelcomeTitle\"=>$WelcomeTitle,

           \"UserName\"=>$UserName,

           \"WelcomeMessage\" =>$WelcomeMessage

           ));

       

       输出替换后的HTML

       $tpl->show();

       ?

>

   

   这样写好后,Welcome.htm仍然可以使用网页编辑器如Dreamweaver、FrontPage进行编辑,Welcome.php中是纯粹的PHP代码,不含HTML,方便以后的代码修改和维护。

   如果将IntegratedTemplateExtension类和PHP4中的Cache类联合使用,在速度上可以得到很好的效果。

   PHP4模板类还可以使用Block,配合其他PHP4中的类可以很轻松地实现数据库数据检索的翻页,可以很轻松写出论坛之类的软件。

   补充说明:

为了防止用户直接用Welcome.htm看网页,将Welcome.htm放在客户访问不到的目录(只要不在WebServer的虚拟目录下即可)。

对于大型的PHP项目,图片、PHP代码、HTML文件、多语言字符串文件都应该放在不同的目录,这样在多人共同做一个项目时不至于混乱。

(责任编辑:

超越PHP)

有时候使用require_once()书写php语句时,会出现找不到包含文件的错误。

但我们仍然可以使用fopen()打开欲包含的文件,这说明权限和路径看起来是正确的。

为什么会出现这种奇怪的情况呢?

  起初我认为require_once(filename)函数中的参数filename采用了相对路径,是以当前php文件为参照物的,但我查阅了相关资料后,推翻了自己的观点。

  在php.ini中有个参数叫做include_path,它类似DOS和UNIX中的PATH环境变量,为require/include_once()、require/include()提供了供搜索的路径列表,例如:

include_path=

.:

/usr/local/lib/php:

./include

  在UNIX下我们用冒号分隔每个路径,在Windows下则用分号分隔。

我们看到在include_path的默认值中包含"."的路径,它就是造成人们“相对路径”假象的“罪魁祸首”,另外我们可以加上"/"的搜索路径,在架设了虚拟主机的服务器上,这个路径是很有用的。

  当我们辛辛苦苦架好第一个php环境后,都会沉浸在无比的兴奋当中,从而忘记了对php.ini的进一步研究;事实上,一旦某些参数设置不当导致错误,我们就会花很长的时间去找原因,这个代价足以让很多电脑爱好者望而生畏。

其实UNIX/LINUX的难,也就“难”在这里。

PathsandDirectories

表格H-5.路径和目录配置选项

名称

默认值

类型

include_path

PHP_INCLUDE_PATH

PHP_INI_ALL

doc_root

PHP_INCLUDE_PATH

PHP_INI_SYSTEM

user_dir

NULL

PHP_INI_SYSTEM

extension_dir

PHP_EXTENSION_DIR

PHP_INI_SYSTEM

cgi.fix_pathinfo

"0"

PHP_INI_SYSTEM

cgi.force_redirect

"1"

PHP_INI_SYSTEM

cgi.redirect_status_env

""

PHP_INI_SYSTEM

fastcgi.impersonate

"0"

PHP_INI_SYSTEM

cgi.rfc2616_headers

"0"

PHP_INI_SYSTEM

以下是该配置选项的简要解释。

include_pathstring

指定一组目录用于require(),include()和fopen_with_path()函数来寻找文件。

格式和系统的PATH环境变量类似:

一组目录的列表,在UNIX下用冒号分隔,在Windows下用分号分隔。

例子H-1.UNIXinclude_path

include_path=".:

/php/includes"

例子H-2.Windowsinclude_path

include_path=".;c:

\php\includes"

在包含路径中使用.可以允许相对路径,它代表当前目录。

doc_rootstring

PHP在服务器上的根目录。

仅在非空时使用。

如果PHP被配置为安全模式,则此目录之外的文件一概不被解析。

如果PHP编译时没有指定FORCE_REDIRECT,并且在任何web服务器(除了IIS)中以CGI方式运行PHP,则应该设定doc_root。

替代方案是使用下面的cgi.force_redirect配置选项。

user_dirstring

在用户目录之下使用PHP文件的基本目录名,例如public_html。

extension_dirstring

PHP用来寻找动态连接扩展库的目录。

参见enable_dl和dl()。

extensionstring

当PHP启动时所加载的动态连接扩展库。

cgi.fix_pathinfoboolean

对CGI提供了真正的PATH_INFO/PATH_TRANSLATED支持。

以前PHP的行为是将PATH_TRANSLATED设为SCRIPT_FILENAME,而不管PATH_INFO是什么。

有关PATH_INFO的更多信息见cgi规格。

将此值设为1将使PHPCGI修正其路径以遵守规格。

设为0将使PHP的行为和从前一样。

默认为零。

用户应该修正其脚本使用SCRIPT_FILENAME而不是PATH_TRANSLATED。

cgi.force_redirectboolean

在大多数web服务器中以CGI方式运行PHP时很有必要用cgi.force_redirect提供安全。

PHP默认其为On。

可以将其关闭,但风险自担。

注:

Windows用户:

可以安全地在IIS之下将其关闭,事实上必须这么做。

要在OmniHTTPD或Xitami之下使用也必须将其关闭。

cgi.redirect_status_envstring

如果打开了cgi.force_redirect,并且不是在Apache或Netscape(iPlanet)web服务器之下运行,可能需要设定一个环境变量名,PHP将去寻找它来知道可以继续执行下去。

注:

设定此变量可能会导致安全问题,首先要知道自己在做什么。

fastcgi.impersonatestring

IIS(在基于WINNT的操作系统上)中的FastCGI支持模仿客户端安全令牌的能力。

这使得IIS能够定义运行时所基于的请求的安全上下文。

Apache中的mod_fastcgi不支持此特性(03/17/2002)。

如果在IIS中运行则设为1。

默认为0。

cgi.rfc2616_headersint

指定PHP在发送HTTP响应代码时使用何种报头。

如果设定为0,PHP发送一个Status:

报头,Apache和其它webserver都支持。

如果此选项设定为1,PHP将发送RFC2616兼容的报头。

除非你知道自己在做什么,否则保留其值为0

实例学习PHP之FastTemplate模板篇

作者:

地藏 来源:

ASP酷

 

  如果你从来没有接触过PHP,那么还是先看看这个吧,当然即使是你已经对PHP有所了解,但一本PHP4的的使用手册也还是需要的,:

)。

此外一本HTML语法手册当然也是不可缺少的啦。

  

    在网站开发过程中你是不是经常面对改版的苦恼?

几百几千个文件因为版式上的一点小变化就需要全部重新处理,是不是让你头痛无比?

唉,如果能够把内容和表现形式分开就好了,这可是我们一直翘首等待的。

但可惜用于处理这个问题的XML还未完全的成熟。

难道除此之外就没有办法了吗?

正所谓东西是死的,人却是活的,我们今天要学习的这个php库,就可以帮助我们在一定程度上处理这个问题。

))

  

    FastTemplate是什么?

从PHP语言上来讲它是一个PHP库;从它的起源来说它源于一个同样名称的Perl软件包;从用途上来讲是一个可以让你在几秒内改变整个站点外观的实用工具。

用最通俗的语言来说,它就是一个模板,一个类似DreamWaver中的模板。

现在FastTemplate在你心里是一个问号?

还是一个感叹号?

又或是一个句号?

(编辑:

靠,在这骗稿费呀,我扁!

)算了,不管那么多,你只要知道他是好东西就成,:

  

    首先在我们使用这个库以前当然要先下载它,大家可以在下面这个网址

  

  FastTemplate-1.1.0/

  FastTemplate-1.1.0/README<-这个文件就不用说了吧?

  FastTemplate-1.1.0/class.FastTemplate.php3<-这个文件最重要,它就库文件,核心耶!

  FastTemplate-1.1.0/example_1.phtml<-一个例子

  FastTemplate-1.1.0/example_2.phtml<-第二个例子

  FastTemplate-1.1.0/example_3.phtml<-第三个例子

  FastTemplate-1.1.0/dynamic_example.phtml<-第四个例子

  

  FastTemplate-1.1.0/docs/<-文档目录

  FastTemplate-1.1.0/docs/FastTemplate.3<-Unixmanpage

  FastTemplate-1.1.0/docs/FastTemplate.html<-HTMLdocumentation

  

  FastTemplate-1.1.0/templates/<-模板例子的目录

  FastTemplate-1.1.0/templates/begin.tpl

  FastTemplate-1.1.0/templates/header.tpl

  FastTemplate-1.1.0/templates/main.tpl

  FastTemplate-1.1.0/templates/row.tpl

  FastTemplate-1.1.0/templates/test.tpl

  FastTemplate-1.1.0/templates/footer.tpl

  FastTemplate-1.1.0/templates/htaccess.tpl

  FastTemplate-1.1.0/templates/middle.tpl

  FastTemplate-1.1.0/templates/table.tpl

    注意哟,这个目录一定要是php程序可以访问的目录哟,换句话说就是php.ini里那个include目录。

然后呢,使用php4编程的朋友注意了,你现在还不能直接使用这个库,还需要人工做些修改!

等下注意看下面。

php3的读者就不用管那么多,现在就可以试一下它带的那几个例子了,(嘿嘿,不过呢,它那些例子的后缀名全是phtml,如果你没办法设置web的话。

你可以尝试把后缀名改改看,应该也可以用,地藏没有试过不敢打包票。

)那!

接着呢,php4的兄弟可千万要注意哟,如果不你不按下面的修改的话,这个库可是没有办法用的哟!

  

  ---class.FastTemplate.php3SunJun2713:

44:

471999

  +++php4.FastTemplate.php3TueJul2010:

49:

251999

  @@-196,8+196,10@@

  settype($val,\"string\");

  }

  

  -$template=ereg_replace(\"{$key}\",\"$val\",\"$template\");

  -//$template=str_replace(\"{$key}\",\"$val\",\"$template\");

  +//php4doesn\'tlike\'{$\'combinations.

  +$key=\'{\'.\"$key\".\'}\';

  +$template=ereg_replace(\"$key\",\"$val\",\"$template\");

  +//$template=str_replace(\"$key\",\"$val\",\"$template\");

  }

  }

  

  @@-410,7+412,7@@

  }

  if($end)

  {

  -$newParent.=\"{$MacroName}

  \";

  +$newParent.=\'{\'.\"$MacroName}

  \";

  }

  //Nextlineplease

  if($end){$end=false;}

  

    大家用文本编辑器打开class.FastTemplate.php3文件,找到上面的部分。

\'-\'减号代表消除这行,\'+\'加号代表加入这行。

另外windows系统下的朋友注意哟!

你们还需要改点小东西,把下面的那个$win32变量的值改成true,不改的话,用不了可别骂我,;)。

  

    var$WIN32=true;//SettotrueifthisisaWIN32server

  

    改好后,大家就可以试试他的那几个例子了。

如何?

成功了吧。

嘿嘿嘿嘿~~~,地藏不会骗大家的啦。

  

    OK,现在这个库已经可以用啦,我们准备进行下面的学习吧,:

  

    如何使用这个库?

简单哟,首先要把这个库包含进来。

也就是说呢,要include\"class.FastTemplate.php3\";然后?

呵呵……然后我也不知道啦!

(编辑:

\"嘿!

找扁啊,你!

\")啊,啊…!

Sorry,我想起来了(在地藏被众编辑海扁一顿之后)。

然后是学习这个库的使用原理。

在这里呢我们先做个假设。

  

    我们假设一个页面是由很多的小的部分组成(比如:

每个网站都有分栏目导航等等),而且每个小的部分都有一个唯一的标识符(比如:

我们把分栏每个小项定义为一个名字)

  

    我们首先以这个库自带的example_1为例,让大家可以尽快的学会这个库的基本用法,;),不过大家要注意哟,这几个文件在服务器上的位置要按解压时的相对路径来存,千万不要忘记,就象不要忘记你女朋友的生日一样。

呵呵~~~~

  

    

  

    //ExampleFastTemplateDemo#1-Theexamplefromthemanpage

  

    Header(\"Content-type:

text/plain\");

  

    include(\"class.FastTemplate.php3\");

  $tpl=newFastTemplate(\"./templates\");

  

    $tpl->define(

  array(

  main=>\"main.tpl\",

  table=>\"table.tpl\",

  row=>\"row.tpl\"

  )

  );

  

    $tpl->assign(array(TITLE=>\"FastTemplateTest\"));

  

    for($n=1;$n<=3;$n++)

  {

  $Number=$n;

  $BigNum=$n*10;

  $tpl->assign(

  array(

  NUMBER=>$Number,

  BIG_NUMBER=>$BigNum

  )

  );

  $tpl->parse(ROWS,\".row\");

  }

  

    $tpl->parse(MAIN,array(\"table\",\"main\"));

  

    $tpl->FastPrint();

  

    exit;

  

    ?

>

  

    

--NAME:

main.tpl-->

  

  {TITLE}

  

  

  {MAIN}

  

  

  

--END:

main.tpl-->

  

    

--NAME:

table.tpl-->

  

  {ROWS}

  <

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 生产经营管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1