位置: 编程技术 - 正文

PHP的自定义模板引擎(php自定义表单)

编辑:rootadmin

推荐整理分享PHP的自定义模板引擎(php自定义表单),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:php的自定义模板在哪,php的自定义模板怎么用,php的自定义模板在哪,php的自定义模板怎么用,php的自定义模板是什么,php的自定义模板怎么用,php的自定义模板是什么,php的自定义模板是什么,内容如对您有帮助,希望把文章链接给更多的朋友!

前面的话

在大多数的项目组中,开发一个Web程序都会出现这样的流程:计划文档提交之后,前端工程师制作了网站的外观模型,然后把它交给后端工程师,它们使用后端代码实现程序逻辑,同时使用外观模型做成基本架构,然后工程被返回到前端工程师继续完善。就这样工程可能在后端工程师和前端工程师之间来来回回好几次。由于后端工程师不干预任何相关HTML标签,同时也不需要前端代码和后端代码混合在一起。前端工程师只需要配置文件,动态区块和其他的界面部分,不必要去接触那些错综复杂的后端代码。因此,这时候有一个很好的模板支持就显得很重要了。本文将详细介绍PHP中的模板引擎

概述

什么是网站模板?准确地说,是指网站页面模板,即每个页面仅是一个板式,包括结构、样式和页面布局,是创建网页内容的样板,也可以理解为已有的网页框架。可以将模板中原有的内容替换成从服务器端数据库中动态内容,目的是可以保持页面风格一致

PHP是一种HTML内嵌式的在服务器端执行的脚本语言,所以大部分PHP开发出来的Web应用,初始的开发模板就是混合层的数据编程。虽然通过MVC设计模式可以把程序应用逻辑与网页呈现逻辑强制性分离,但也只是将应用程序的输入、处理和输出分开,网页呈现逻辑(视图)还会有HTML代码和PHP程序强耦合在一起。PHP脚本的编写者必须既是网页设计者,又是PHP开发者

现在已经有很多解决方案,可以将网站的页面设计和PHP应用程序几乎完全分离。这些解决方案称为“模板引擎”,它们正在逐步消除由于缺乏层次分离而带来的难题。模板引擎的目的,就是要达到上述提到的逻辑分离的功能。它能让程序开发者专注于资料的控制或是功能的达成。因此,模板引擎很适合公司的Web开发团队使用,使每个人都能发挥其专长

模板引擎技术的核心比较简单。只要将前端页面指定为模板文件,并将这个模板文件中动态的内容,如数据库输出、用户交互等部分,定义成使用特殊“定界符”包含的“变量”,然后放在模板文件中相应的位置。当用户浏览时,由PHP脚本程序打开该模板文件,并将模板文件中定义的变量进行替换。这样,模板中的特殊变量被替换为不同的动态内容时,就会输出需要的页面

目前,可以在PHP中应用的并且比较成熟的模板有很多,例如Smarty、PHPLIB、IPB等几十种。使用这些通过PHP编写的模板引擎,可以让代码脉络更加清晰,结构更加合理化。也可以让网站的维护和更新变得更容易,创造一个更加良好的开发环境,让开发和设计工作更容易结合在一起。但是,没有哪一个PHP模板是最合适、最完美的。因为PHP模板就是大众化的东西,并不是针对某个人开发的。如果能在对模板的特点、应用有清楚的认识基础上,充分认识到模板的优势劣势,就可以知道是否选择使用模板引擎或选择使用哪个模板引擎

自定义模板引擎类

自定义模板引擎,能够更好的掌握模板引擎的工作机制,为学习Smarty做好准备。更重要的是,属于自己的PHP模板引擎永远不是固定不变的,可以根据项目的需要为其量身定制

在下例中,通过前面介绍的模板引擎概念创建了属于自己的一个简单模板引擎,可以用来处理模板的基本功能。例如:变量替换、分支结构、数组循环遍历,以及模板之间相互嵌套等,如下所示:

在Mytpl类中声明的多个方法中,除被封装过的方法之外,只有两个公有方法assign()和display()在创建对象以后可以被凋用。其中assign()方法用来将PHP脚本中的数据分配给模板中对应的变量,display()方法则用来将特定的templates目录下的模板文件加载到PHP脚本中。同时将模板文件中使用“<{”和“>>”标记声明的自定义模板语句,匹配出来并替换成相对应的PHP语法格式,然后将替换后的内容保存在特定的templates_c目录下。在运行时还要编译成一个非模板技术的PHP文件,并将其以模板文件名加上“com_”前缀和“.php”的扩展名形式保存。再通过include()函数将处理后的模板文件包含,并使用PHP解析后发送给客户端

使用模板引擎

使用自定义的模板引擎比较容易,都是自己定义的语法格式。但要记住,所有流行的模板引繁解决方案都遵循同样的一组相同的核心实现原则,就是与编程语言一样,学习了一种语言就可以更容易地掌握其他语言。使用模板引擎最主要的原因就是将前端工程师和后端工程师的工作分开,所以模板引擎不仅后端工程师需要使用,前端工程师也需要使用

1、后端工程师对模板引擎的使用

在PHP脚本中包含模板引擎类所在的文件。如下所示:

require("mytpl.class.php"); //包含模板引擎类,相当于模板引擎安装

创建模板引擎类的对象并对一些成员属性进行初始化赋值。如下所示:

$tpl=new MyTpl(); //创建模板引擎类的对象,也可以根据参数对成员初始化

将动态数据(包括标量和数组类型的数据,例如从数据库的表中获得的数据数组)使用模板引擎对象中的assign()方法分配给模板文件,这个方法可以使用多次,将任意多个变量分配给模板。如下所示:

在PHP脚本中通过调用模板对象中的display()方法,并将模板文件名作为参数传入,就会加载指定目录中对应的模板文件到PHP脚本中。再通过模板引擎中的替换方法对模板中自定义的语法进行解析,然后输出处理后的模板。如下所示:

$tpl->display("test.tpl"); //参数“test.tpl”为特定目录下的模板文件

PHP的自定义模板引擎(php自定义表单)

2、前端工程师对模板引擎的使用

前端工程师需要将编写的模板文件存放到指定的目录中,这个目录是通过在模板对象中使用$template_dir属性指定的,默认的设置是当前目录下的“templates”目录。另外,模板文件的命名以及后缀名的设置可以随意,例如index.tpl、test.htm、header.tp;等

模板文件是通过使用HTML、CSS以及javascript等Web前台语言以编写的纯静态负而。但可以在模板文件中使用“<{”和“}>”两个分隔符中间定义一个变量(类似PHP中的变量格式),该变量可以接受并输出由PHP脚本中分配过来的动态数据。在模板中使用的“<{”和“}>”两个分隔符对,也可以根据个人爱好在模板引擎类中修改。如下所示:

姓名:<{$name}>,年龄:<{$age}>,性别:<{$sex}> //模板中使用占位符

如果在PHP脚本中是将数组分配给模板,也可以在模板中进行遍历,还可以通过嵌套的方式遍历多维数组。使用的是在模板引擎中定义的“<{loop}>”标记对,使用的方式和PHP中foreach结构的语法格式相似。如下所示:

模板引擎还可以解析在模板文件中使用特殊标记编写的分支结构,语法风格也是和PHP的分支结构类似。是通过在模板文件中使用“<{if}>”标记对实现选择结构,也可以实现多路分支和嵌套分支的选择结构。如下所示:&#;

在自定义的模板引擎中,也添加了在模板文件中包含其他模板文件的功能。可以使用“<{include‘子模板文件名'}>”标记将子模板包含到当前模板中,还支持在子模板中再次包括另外的子模板。如下所示:

<{include 'other.tpl' }>

使用示例分析

通过在程序中加载模板引擎可以将前端语言与后端语言的代码分开。首先在PHP程序中获取数据库中存储的数据,再通过加载模板引擎将数据分配出去,然后将模板文件再通过模板引擎加载并处理后输出。所以PHP程序只是创建动态数据,加载模板引擎并将动态数据分配给模板,完成了PHP程序的工作。而模板的设汁也只需要前端工程师独立完成,使用HTML、CSS及javascript等前台页面设计语言编写。另外,在模板文件中还需要使用模板引擎可以解析的标记,将PHP中分配过来的动态数据在模板中引用

1、数据库的设计

假设数据库服务器在“localhost”主机上,连接的用户名和密码分别为“admin”和“”,在该服务器上创建一个名为“mydb”的数据库,并在该数据库中创建一个名为“User”的用户表。创建该表的SQL?搜?锞淙缦滤?荆?/p>

用户表User创建完成以后,接着可以向该表中插入一些数据作为示例演示使用,SQL查询语句如下所示:

2、模板的设计

模板的设计不要出现任何的PHP代码,可以由前端人员来完成。在自定义的模板引擎中,规定了要到指定的目录中去寻找模板文件,这个特定的目录可以在创建模板引擎对象时指定,也可以使用默认的目录设置,默认可以将模板文件存放在当前目录中的“templates”目录下。本例共需要三个模板文件main.tpl、header.tpl和footer.tpl,都存放在这个默认的目录设置中。这三个模板文件的代码如下所示:

模板的头部文件header.tpl

模板的尾部文件footer.tpl

主模板文件main.tpl

文件main.tpl是主模板文件,在该文件中使用<{include"header.tpl"}>和<{include"footer.tpl"}>两个标记分别在该文件的顶部和底部,将独立的头部和尾部模板文件包含到这个主模板文件中。并在该文件中使用<{tableName}>标记获取从PHP中动态分配过来的表名,以及使用双层<{loop}>标记嵌套,遍历从PHP中动态分配过来的在数据库中获取到的二维数组$Users,还在<{loop}>标记中使用条件选择标记<{if}>组合,将数据中性别为“男”的表格背景设置为红色和一些其他判断。被包含进来的头部模板文件header.tpl和尾部模板文件footer.tpl也同样可以获取从PHP中动态分配给模板的数据

3、PHP程序设计

通过模板引擎的使用,PHP程序员在编写代码时,只需要PHP一种语言就可以了,不用再去使用HTML、CSS以及javascript等页面设计语言完成前端的工作了。下面是一个文件名为index.php的PHP脚本文件,和模板引擎类所在的文件mytpl_class.php在同一个目录下。代码如下所示:

在上面的PHP脚本文件中,通过PDO对象连接MySQL服务器,并获取用户表User中的全部记录,并以PHP的二维数组变量形式保存在变量data中。接着使用包含进来的当前目录下的“mytplclss.php”文件,创建并初始化模板引擎类的对象data中。接着使用包含进来的当前目录下的“mytplclss.php”文件,创建并初始化模板引擎类的对象tpl。再通过该对象中的assign()方法向模板分配一些数据,然后使用该对象中的display()方法载入模板文件main.tpl。并将模板中标记的特殊变量替换为从PHP中分配的动态数据,处理完毕以后输出模板页面。页面的输出结果如下所示

限于各种不同的条件限制,比如时间、经验,做一个自定义的PHP模板引擎是非常困难的。其实,需要的并不是重新构造一个PHP模板,而是选择一个最贴近自己的PHP模板加以改造

标签: php自定义表单

本文链接地址:https://www.jiuchutong.com/biancheng/293385.html 转载请保留说明!

上一篇:ThinkPHP模板标签eq if 中区分0,null,false的方法(thinkphp 模块)

下一篇:总结的一些PHP开发中的tips(必看篇)(php开发实例大全)

  • 企业当期应纳增值税
  • 进项税额转出借方科目
  • 企业所得税税负率怎么算出来的
  • 公司法人已变更,前法人被失信
  • 未确认融资费用和长期应付款
  • 展览服务费进项可以抵扣吗
  • 资产减值准备对股票的影响
  • 进项税需要转出吗
  • 企业汇算清缴时允许税前扣除的工资是什么
  • 企业平时计提的税费分录
  • 未确认融资费用借贷方向
  • 报关单有多个合同协议号
  • 公司网站建设费入什么明细科目里
  • 住宅租给公司办什么手续
  • 服务类的企业发票税率
  • 账本印花税每年交吗,要交几本
  • 广告业 增值税
  • 企业上市过程中遇到的困难
  • 新个税过了申报期怎么办
  • 财务费用算营业利润吗
  • 增值税小规模纳税人优惠政策
  • 小规模销项负数发票怎么做账
  • 1697510742
  • 报销差旅费涉及的会计科目
  • 虚拟机中如何将文件移动到普通用户的家目录下
  • 长期借款利率怎么算
  • 施工企业会计制度有哪些
  • 纳税人依法可以享受减免税待遇而没有享受的
  • win10版本激活码
  • 房地产销售代理是什么意思
  • 公司注销不清算可以吗
  • php数组函数输出《咏雪》里有多少"片"字
  • 电脑输入法设置搜狗输入法
  • 增资导致的股权稀释涉税吗
  • 清晨暴雨的说说
  • 委托加工不提供原材料会计分录
  • 冰上的卷羽鹈鹕,希腊凯尔基尼湖 (© Guy Edwardes/Minden Pictures)
  • vue插槽的使用场景
  • 使用session的步骤
  • node使用axios
  • 门窗安装属于土建还是安装?
  • 驱动开发:内核是什么
  • 员工向用人单位借钱怎么处理
  • 报销货物运输费需要什么凭证
  • 门诊收费票据能重新打印吗
  • 长期股权投资减值准备是什么科目
  • 银行转账付款会计分录
  • 单位销售收入不包括哪些
  • 残保金会计分录人员经费
  • 营业执照是什么字体
  • 其他权益工具账面价值
  • 如何确认产品销售收入
  • 公司欲购买一台设备,现在一次性
  • 外聘老师的费用如何做账
  • 工程总包含设备工程吗
  • 代收代缴水电费如何开票
  • 免税如何做分录发票
  • 应收账款占比高受哪些因素影响
  • 长期股权投资出售时其他权益变动
  • 工程结算属于什么行业
  • 处置固定资产应通过什么账户核算
  • 资产减值损失属于营业外支出吗
  • win7怎么更改音频输出
  • Mac OS X 10.9 Mavericks系统怎么激活?
  • win7系统360浏览器自启动怎么关闭
  • win7网卡驱动怎么卸载
  • win10怎么删除无用文件
  • win7无线网络连接不上怎么解决方法
  • Win10年度更新正式发布:功能全面升级
  • jquery如何给div属性赋值
  • 只有一行的矩阵的逆矩阵
  • 转换目录的命令
  • linux管道定义
  • python给批量图片添加文字
  • unity制作的2d游戏
  • unity3d基于物理系统的2D平台跳跃游戏
  • js阻止浏览器后退
  • ActivityManagerService (二)
  • ubuntu各种方法卸载软件
  • 江苏省国家税务局总局官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设