怎么实现PHP代码和html代码100%分离

朱丽叶与驴斗殴 2010-12-22 09:01:35
RT,如果尽量不使用模板引擎的时候,有什么办法可以实现PHP代码和HTML 代码100%分离?
下面是我的想法,但是有很多缺点
将一个完整的HTML文件根据需要分割成几部分,入头部,脚部,还有一些需要通过循环来获得结果的内容(像论坛里的回复之类的),然后在PHP中引入文件,通过循环、判断等语句来决定怎么替换变量,最后输出。
但是这样有个问题,就是可能会把很多div标签分开的不同的文件,日后维护修改不方便
不知道你们平时都是怎么做的?
...全文
535 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
homexigua 2010-12-25
  • 打赏
  • 举报
回复
看看框架,一般都实现分离了
在-云端 2010-12-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 liveasamonster 的回复:]

楼上的我每天都能看到你也
[/Quote]

呵呵!项目空歇期!
LiveAsaMonster 2010-12-23
  • 打赏
  • 举报
回复
楼上的我每天都能看到你也
在-云端 2010-12-23
  • 打赏
  • 举报
回复
你可以把你所有的逻辑都写在处理页面,但是在模版里是一定会出现类似<?=$xxx ?>这样的变量输出的(不论是如何改变)
phper002 2010-12-23
  • 打赏
  • 举报
回复
模板引擎的思路,就是最好的分离思路。
helloyou0 2010-12-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 hst0012010 的回复:]
RT,如果尽量不使用模板引擎的时候,有什么办法可以实现PHP代码和HTML 代码100%分离?
下面是我的想法,但是有很多缺点
将一个完整的HTML文件根据需要分割成几部分,入头部,脚部,还有一些需要通过循环来获得结果的内容(像论坛里的回复之类的),然后在PHP中引入文件,通过循环、判断等语句来决定怎么替换变量,最后输出。
但是这样有个问题,就是可能会把很多div标签分开的不同的文件,日后维……
[/Quote]


虽然"尽量不使用模板引擎", 但是你也必须使用某种方式把内容输出到html里,

那么你是否是指用<?=$xxx ?>这样的方式?

光靠这个是无法完全满足需要的,
至少应该结合 if/else/endif (条件)
foreach (循环)
include/require (包含),
这样的话,你就大致可以完全分离了.




  • 打赏
  • 举报
回复
做成传说中的.tpl格式。
HOOLOO 2010-12-23
  • 打赏
  • 举报
回复

分个毛,就这么写写吧。
foolbirdflyfirst 2010-12-23
  • 打赏
  • 举报
回复
LZ可以去研究下国外的joomla cms是如何设计模板文件的,一个文件,影响全局,不算100%分离,不过有这么个概念,这世上就没有100%的东西,

joomla某个模版代码片断.

<div class="center" align="center">
<div id="wrapper">
<div id="wrapper_r">
<div id="header">
<div id="header_l">
<div id="header_r">
<div id="logo"></div>
<!--引入设置了位置为top的所有模块,模块由php编写-->
<jdoc:include type="modules" name="top" />
</div>
</div>
</div>

<div id="tabarea">
<div id="tabarea_l">
<div id="tabarea_r">
<div id="tabmenu">
<table cellpadding="0" cellspacing="0" class="pill">
<tr>
<td class="pill_l"> </td>
<td class="pill_m">
<div id="pillmenu">
<jdoc:include type="modules" name="user3" />
</div>
</td>
<td class="pill_r"> </td>
</tr>
</table>
</div>
</div>
</div>
</div>

<div id="search">
<jdoc:include type="modules" name="user4" />
</div>

<div id="pathway">
<jdoc:include type="modules" name="breadcrumb" />
</div>
wxq4100798 2010-12-23
  • 打赏
  • 举报
回复
楼主的那个就是smarttemplate
<!-- INCLUDE head.html -->
<script src="{WEB_URL}cache/departure.js" ></script>
<script src="{WEB_URL}cache/destination_cat.js" ></script>
<script src="{WEB_URL}cache/destination_cat_parent.js" ></script>
<script src="{this->settings.res_url}script/manage_dest/manage_dest.js" ></script>
</head>
<body>
<form name="search_form" id="search_form" method="POST" action="{manage_url}">
<div>
出发城市<select name="begin_city_code" id="begin_city_code" onchange="change_begin_city(this.value,{'is_abroad_field':'is_abroad','p_cat_field':'p_dest_cat_id','cat_field':'dest_cat_id'});">
<option value = "0" >请选择</option>
{this->input.begin_city_code_option}
</select>


<select name="is_abroad" id="is_abroad" onchange="change_is_abroad(this.value,{'begin_city_field':'begin_city_code','is_abroad_field':'is_abroad','p_cat_field':'p_dest_cat_id','cat_field':'dest_cat_id'});" >
<option value = "">不限</option>
<option value = "0" {this->input.is_abroad_select0}>国内</option>
<option value = "1" {this->input.is_abroad_select1}>出境</option>
</select>


大方向<select name="p_dest_cat_id" id="p_dest_cat_id" onchange="change_p_dest(this.value,{'cat_field':'dest_cat_id'});" >
<option value = "">请选择</option>
{this->input.p_dest_cat_id_option}
</select>
小方向<select name="dest_cat_id" id="dest_cat_id" >
<option value = "">请选择</option>
{this->input.dest_cat_id_option }
</select>部门ID<select name="dep_id" id="dep_id" >
<option value = "">请选择</option>
{this->input.dep_id_option }
</select> </div>
<div><input type="submit" name="search_submit" id="search_submit" value="搜索" /></div>
</form>


<table class="list" border="1">
<thead>
<th>出发城市</th>
<th>大方向</th>
<th>小方向</th>
<th>客服组</th>
<th>产品组</th>
</thead>
<tbody>

<!-- BEGIN this->input.departure_list_loop begin_city_code=>r -->
<!-- BEGIN this->input.destination_cat_parent_list_loop.$begin_city_code p_cat_id=>pc_r -->
<!-- BEGIN this->input.destination_cat_list_loop.$p_cat_id cat_id=>c_r -->
<tr>
<!-- IF begin_city_code != pre_city_code -->
{begin_city_code > pre_city_code}
<td rowspan="{r.rowspan}">{r.name}</td>
<!-- ENDIF -->
<!-- IF p_cat_id != pre_p_cat_id -->
{p_cat_id > pre_p_cat_id}
<td rowspan="{pc_r.rowspan}">{pc_r.name}</td>
<!-- ENDIF -->
<td>{c_r.name}</td>
<td>{data_lists.$p_id}</td>
<td>{update_time}</td>
</tr>
<!-- END destination_list_cat_loop -->
<!-- END destination_cat_parent_list_loop -->
<!-- END departure_list_loop ELSE -->
<tr>
<td colspan="10">暂无记录</td>
</tr>
<!-- ENDIF -->
</tbody>
</table>
{page_html}
<!-- INCLUDE foot.html -->
技术小黑屋 2010-12-23
  • 打赏
  • 举报
回复
用模板是最好的方法
不喝水的鱼 2010-12-23
  • 打赏
  • 举报
回复
网页无非是形成一个统一格式的文件,能让浏览器阅读并按照相应的规则显示样式之类的!也就是说你在浏览器端点击查看源码后看到的其实都是统一格式的东西。现在要设计或者优化的无非是这个文件怎么生成而已!诚然你用最基本的php等等的语法,不论是include_once还是require_once都可以实现php文件和其他文件的整合显示。当然你要是自己在php程序中自己写流,自己用php文件生成静态的.htm文件不也一样!?分离不分离的区别可能在代码的整洁上,代码的安全性上有些区别。但只要能实现最终的目的,达到要求的程度不就可以了吗?而且我始终认为最基本的才是最重要的,一切高级的东西都是在最基本的规则上建立起来的。(话说多了!O(∩_∩)O哈哈~)
zhaojunwww 2010-12-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hst0012010 的回复:]
不是这样的,我的意思是在酱紫滴:

这是一个HTML文件,我们要的样式也在里面

HTML code

<html>
<head>
<title>总文件</title>
</head>

<body>
<!--这个文件将被分成3个.tpl后缀的文件,上面是第一部分,记为part1.tpl-->
<div>{$var1}</div>
……
[/Quote]

你这不就是网页静态化嘛 不知道楼主实际运用没 {$var1}不可能都是数据吧 肯定有列表 表格之类的 这样的话你认为分离了吗?我看是更复杂了
helloyou0 2010-12-23
  • 打赏
  • 举报
回复
这样做当然也可以,一些初期的模板引擎也的确是这样做的,
但是这样有很多缺点,如你所见到的,
需要分割文件(因为模板没有include功能)
需要将显示逻辑放入php文件,一个是繁琐,另一个导致页面的改变需要修改php文件,
这些完全可以通过增加{if}/{foreach}等控制标签来实现

这个其实就是模板的设计问题,

不知道你用的是什么引擎,
你可以看看smarty,
另一个个人推荐的是phptal,我没实际用过,不知道究竟如何,但是其设计值得一看
(它的设计实际来自python的Zope)






[Quote=引用 9 楼 hst0012010 的回复:]

不是这样的,我的意思是在酱紫滴:

这是一个HTML文件,我们要的样式也在里面
HTML code

<html>
<head>
<title>总文件</title>
</head>

<body>
<!--这个文件将被分成3个.tpl后缀的文件,上面是第一部分,记为part1.tpl-->
<div>{$var1}</div>
<div>{……
[/Quote]
  • 打赏
  • 举报
回复
9楼PHP代码循环前后还要把part1.tpl和part3.tpl包含进去
militala 2010-12-23
  • 打赏
  • 举报
回复
模板 smarty 吧
  • 打赏
  • 举报
回复
不是这样的,我的意思是在酱紫滴:

这是一个HTML文件,我们要的样式也在里面

<html>
<head>
<title>总文件</title>
</head>

<body>
<!--这个文件将被分成3个.tpl后缀的文件,上面是第一部分,记为part1.tpl-->
<div>{$var1}</div>
<div>{$var2}</div>
<!--part1.tpl到这里的内容为part2.tpl,下面的为part3.tpl-->
</body>
</html>


这里是PHP文件:

<?php
while(true)
{
.... //这里通过打开读取part2.tpl并赋给一个变量,而非包含文件!
//part2.tpl有这么两个特殊字符串{var1} {var2}
if(true)
{
.... //使用str_replace等把字符串{var1}和{var2}替换成我们要的,这里事实上跟模板引擎
//有点相似
}

}

?>


大概就是这样了,详细的说出来要另开贴才行了
[Quote=引用 4 楼 helloyou0 的回复:]

引用楼主 hst0012010 的回复:
RT,如果尽量不使用模板引擎的时候,有什么办法可以实现PHP代码和HTML 代码100%分离?
下面是我的想法,但是有很多缺点
将一个完整的HTML文件根据需要分割成几部分,入头部,脚部,还有一些需要通过循环来获得结果的内容(像论坛里的回复之类的),然后在PHP中引入文件,通过循环、判断等语句来决定怎么替换变量,最后输出。
但是这样有个问题,就是……
[/Quote]
zhaojunwww 2010-12-22
  • 打赏
  • 举报
回复
100%分离只能用模板了
liveshow 2010-12-22
  • 打赏
  • 举报
回复
有想法很好,但一定要切合实际,爱因斯坦当年想发明永动机,但自己后来发现想法很离谱。

大家写代码,都求精简,效率高,可维护性较好。 个人认为你所谓的100%分离没有任何实际意义。

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧