RT,如果尽量不使用模板引擎的时候,有什么办法可以实现PHP代码和HTML 代码100%分离?
下面是我的想法,但是有很多缺点
将一个完整的HTML文件根据需要分割成几部分,入头部,脚部,还有一些需要通过循环来获得结果的内容(像论坛里的回复之类的),然后在PHP中引入文件,通过循环、判断等语句来决定怎么替换变量,最后输出。
但是这样有个问题,就是可能会把很多div标签分开的不同的文件,日后维护修改不方便
不知道你们平时都是怎么做的?
下面是我的想法,但是有很多缺点
将一个完整的HTML文件根据需要分割成几部分,入头部,脚部,还有一些需要通过循环来获得结果的内容(像论坛里的回复之类的),然后在PHP中引入文件,通过循环、判断等语句来决定怎么替换变量,最后输出。
但是这样有个问题,就是可能会把很多div标签分开的不同的文件,日后维护修改不方便
不知道你们平时都是怎么做的?
至少应该结合 if/else/endif (条件)
foreach (循环)
include/require (包含),
这样的话,你就大致可以完全分离了.
<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}替换成我们要的,这里事实上跟模板引擎
//有点相似
} }
?>
大概就是这样了,详细的说出来要另开贴才行了
但是这样有很多缺点,如你所见到的,
需要分割文件(因为模板没有include功能)
需要将显示逻辑放入php文件,一个是繁琐,另一个导致页面的改变需要修改php文件,
这些完全可以通过增加{if}/{foreach}等控制标签来实现这个其实就是模板的设计问题,不知道你用的是什么引擎,
你可以看看smarty,
另一个个人推荐的是phptal,我没实际用过,不知道究竟如何,但是其设计值得一看
(它的设计实际来自python的Zope)
你这不就是网页静态化嘛 不知道楼主实际运用没 {$var1}不可能都是数据吧 肯定有列表 表格之类的 这样的话你认为分离了吗?我看是更复杂了
<!-- 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 -->
<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>