模板很多!如smarty,templete, fasttemplete,使用这些模板就可以实现php与html代码的分离

解决方案 »

  1.   

    这是PHP一个比较突出的特点之一啊。楼主怎么不知道呢?
      

  2.   

    可以用摸班
    或者自己做个简单MVC框架,当然还要响应做点开发工具
      

  3.   

    用smarty模板,比较官方的,也比较流行
    你可以告诉他自己写了一套模板在用,一定能通过,哈哈,其实也很容易,就是定义一些标记,或嵌入到html页面中,或代替一些常用的html标记如select,input等,便于程序,数据库处理。然后用程序调用包含模板标记静态页面
    不过smarty是基于缓存机制的,有一个templates_c的目录,生成临时文件存放,这方面还比较先进.如果自己写的话复杂一些
      

  4.   

    你告诉问你那个人~~
    逻辑与表现分离才是正道,而不是单纯的HTML与PHP分离老实说,现在真的不喜欢用那些所谓的模板类..现在那些模板除了缓存机制值得一看外,其他的可以扔到大海里去了...
      

  5.   

    "逻辑与表现分离才是正道,而不是单纯的HTML与PHP分离"
    说的很好...
    有些人不看场合,滥用模板类,写的程序性能差到不得了,有时候真不明白,它到底用模板来干嘛。
      

  6.   

    楼上的,逻辑与表现的分开很基本的想法是分离code 和html吧逻辑与表现分离用模板来实现才是正道呀!想想你在html中写inline code的时侯,逻辑能划得比单单的code清楚吗?
      

  7.   

    逻辑与表现分离用模板来实现才是正道呀????????
    -------------------------------------------------------------------------------
    用模板了就能证明逻辑与表现分离了吗?
    code和html分离了就能证明逻辑与表现分离了吗?错..
      

  8.   

    "逻辑与表现分离用模板来实现才是正道呀!想想你在html中写inline code的时侯,逻辑能划得比单单的code清楚吗?"
    这个其实也不一定的
    例如:管理一个网站类目,有些人写程序喜欢这样
    manage_list.php?typeid=1&job=del
    manage_list.php?typeid=1&job=add
    manage_list.php?typeid=1&job=edit
    ...
    这样,就是把所有功能用类封装,这样要实现逻辑与表现分离确实很方便,但另一种做法是
    用 list_add.php
       list_del.php
       list_edit.php
    这样的做法
    因为这样的东西肯定是用在后台管理的,如果封起来,对于原开发者不难理解,但对于想要维护这个程序的人来说,却要花比后者多N倍的时间去读源码.所以说MVC虽然流行,但也要看场合,如果你是在一般的小公司,我觉得用后者还实现一些,起码你走了之后,别人还能维护你的程序,相反,你的程序可能会成为过去.我觉得一个优秀的程序员不仅仅是自己能写出优秀的代码,最重要的是别人能轻松的读懂你的代码.
      

  9.   

    我一直没有觉得模版好用,模版让Html的体积变的很大,程序的运行效率变的很低,而且并没有实现干净的html和code的分离.到现在我还没有找到真正的html和code分离的方法
      

  10.   

    为什么要把PHP代码和HTML分离呢???
    当你在写HTML模板文件的时候,不也是需要把一些模板定义的变量写进去吗??
    例如 {tpl_msg}
    我们干吗不直接写<?=$tpl_msg?>呢???
    难道美工会觉得<?=$tpl_msg?>比{tpl_msg}难得多吗??
    你可能会说,HTML模板文件都不是PHP文件,怎么用啊?
    我晕......
    后缀干吗一定要是.tpl,.html???直接用.php不行吗?
    PHP本身就可以作为一种简单的模板处理机制..
    只要在模板里没有或尽量避免逻辑成分,就可以达到我们的目的了....
      

  11.   

    "surfchen(冲浪) "说的比较有道理
    在国人开发的程序中,我觉得dedecms的模板技术挺实用的,它类似XML的语法,网页设计师比较容易理解
    如: <dede:artlist typeid='0' titlelength='36' row='6'/> 这样
      

  12.   

    to flyonet:
       没有说用了模板就是实现了逻辑与表现的分离呀,你误解了我的意思to surfchen(冲浪)
       为什么要把php代码和HTML分离呢?因为就是要逻辑与表现的分离呀. 这个不用说了吧.
       是的,可以<?=$tpl_msg?>,但是你如果用code inline的写法的话,那你生成这个$tpl_msg的逻辑也要放在这个页面了. 
       code inline的做法
       一,代码不好读,特别是有些时侯eaho一些html的时侯,而且总体逻辑也不够清楚
       二,跟设计师不好分工
       三,代码重用性不好,因为代码要兼顾页面
       ... ...to ddboy:
       你举的这个例子,我把我的代码贴上来吧. 我同意是一些分离是要看什么应用,因为要"重视需求",MVC也并不是所有应用的解决良方,但怎么说这也是一种思想,小应用时,我会把CV放在一起,把M分出来,像我下面贴的代码:
      

  13.   

    //这里用到了修改了冰山文章系统的baselogic层,因为我用的是ADODB
    <?php
    //====================================================
    // FileName:MagType.Class.php
    // Summary: 期刊分类
    // Author: pwj
    // CreateTime: 2004-12-09
    // LastModifed:2004-12-09
    // copyright (c)2004 [email protected]
    //====================================================
      require_once(MODEL_PATH.'BaseLogic.Class.php');class MagType extends baseLogic
    {
    /* //数据库字段描述
    var $id; //主键ID
        var $name     //名称
    */ function MagType()
    {
    $this->tblName = TBL_PREFIX . "mg_type";
    $this->fieldList = array("name","imageUrl","parent");
    } function insertInfo($postList)
    {
    $postList['imageUrl'] = uploadFile($_FILES[imageUrl],"../images/mag/");
    return $this->add($postList);
    } function updateInfo($postList)
    {
    if($_FILES['imageUrl']['size']>0){
    $postList['imageUrl'] = uploadFile($_FILES[imageUrl],"../images/mag/");
    $this->delImage($postList['id']);
    } return $this->update($postList);
    } function deleteInfo($postList)
    {
    return $this->delete($postList['id']);
    } function delImage($id){
    $tempInfo = $this->getInfo($id);
    @unlink($tempInfo['imageUrl']); ## 删除原来的预览图片
    }
    }?>
      

  14.   

    //这个算是CV层
    <?PHP
    require_once('../configs/admin.config.php');if (!$user->isLogin()){
    forward('login.php');
    }$magType = new MagType;$action = $_POST["action"];
    switch($action){
    case "update":
    if($magType->updateInfo($_POST)){
    success("更新操作成功");
    }
    break; case "insert":
    if($magType->insertInfo($_POST)){
    success("增加操作成功");
    }

    break;
    }$action = $_GET["action"];$edit = 0; //上面编辑框是增加状态还是编辑状态
    switch($action){
    case "edit":
    if(isset($_GET["id"])){
    $aMagType = $magType->getInfo($_GET["id"]);
    $edit = 1;
    } else {
    error("参数传递错误");
    }
    break;

    case "del":
    if(isset($_GET["id"])){
    if($magType->deleteInfo($_GET["id"])){
    error("删除操作成功","MagType.php");
    }
    }
    break;
    }$smarty->assign(array('edit'=>$edit,
      'aMagType'=>$aMagType,
      'page'=>$magType->pageList()));require_once('end.php');
    因为数据库的操作都是insert,update ,delete,所以我的很多model都是inherite BaseLogic的,而且CV层的操作也都很想像,这样的文件也少了很多
      

  15.   

    to alasika(堕落人间):
    <?=$tpl_msg?>里的$tpl_msg 谁说要在模板里生成?这里的$tpl_msg只是提供一个数据接口~~具体数据的生成是由逻辑部分操作的.
    给你个例子吧~~
    tpl.php
    <h1><?=$tpl_msg?></h1>op.php
    <?php
    $one=5;
    $tow=6;
    $three=$one*$tow;
    $tpl_msg=$three;
    include("tpl.php");
    ?>在这里,美工会对程序员说,我需要这些数据...或许,程序员对美工说,我给你这些数据..
    当然,这只是一个简单的例子,在具体应用中还要考虑很多..
    为什么到现在为止,还有人坚持HTML与PHP的分离就是逻辑与表现的分离呢??
      

  16.   

    你们现在使用的模板..不也要求美工去遵循一定的规则吗??
    干吗非要美工遵循 {xxx}这样的规则???我实在不了解,为什么<?=$tpl_msg?>会比{tpl_msg}复杂.如果你没学过PHP,你会认为<?=$tpl_msg?>不适合作为模板吗??
    模板技术简单地来说,就是自己发明一套重复的工具....PHP已经能作为一个很好的模板工具了.我打个比喻吧~~
    有a事物,他一直做的是x1这件事...
    有b事物,他能做x2这件事..
    其实,a也能做x2这件事...不过由于定势的思维,每个人都会认为a只能做x1这件事..而却耗费大量的人力去创造这个b出来...
      

  17.   

    看上面
    to flyonet:
       没有说用了模板就是实现了逻辑与表现的分离呀,你误解了我的意思
       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!!!!
    to surfchen(冲浪)
       为什么要把php代码和HTML分离呢?因为就是要逻辑与表现的分离呀. 这个不用说了吧.你都不看贴的
      

  18.   

    <?=$tpl_msg?>
    逻辑在哪?
      

  19.   

    在国人开发的程序中,我觉得dedecms的模板技术挺实用的,它类似XML的语法,网页设计师比较容易理解
    如: <dede:artlist typeid='0' titlelength='36' row='6'/> 这样
    --------------------------------------------------------------------------
    类似XML?
    俺没看过这个模板的代码,也没用过
    不过从这句代码来看,根本就是模仿ASP.NET的服务器控件的写法PHP本身就是很好的模板,只不过有时候直接用PHP代码写在View里面,代码有点难看.比如一个循环逻辑
    ASP.NET就没有什么模板,但是他的"后台代码"机制,同样把页面的显示跟逻辑的分离搞的很好