楼主......
先读入一个HTML模板,然后使用REPLACE替换掉相应设置好的TAG,然后ECHO这个替换后的字符串变量到浏览器,这样多简单啊??
->smarty呀~~!

解决方案 »

  1.   

    smarty是什么?没有接触过,但是应该不是我这种原理吧。
      

  2.   

    刚刚想到一个更好的办法,哈哈哈哈,这样也解决了执行效率的问题。示例:a.php
    <?php require_once("b.php");?>
    <html>
    <head>
    <title><?php show_title();?></title>
    </head>
    <body>
    <?php show_body();?>
    </body>
    </html>
    b.php
    <?php
    function show_title()
    {
      echo "hello!word!";
    }function show_body()
    {
      echo "here is body contents!";
    }?>这个方法的好处就是执行效率要比我的前一种方法快!!而且不用使用TAG!!怎么样,大家帮我分析下,如果没有缺陷的话以后我就这么做了!
      

  3.   

    想法再次更新(适合美工和程序为同一个人)!
    可以将A.PHP 和 B.PHP进行合并成一个文件,将B.PHP的代码放在A.PHP的页首,这样减少一次读入的过程,同时也减少了文件数量,不用一个模板一个程序了,同时也便于以后的更新维护!但是如果是团体合作的化还是要分成两个文件,因为要各自开发。不知道那些所谓的“模板技术”效果是否能超越我的这种做法??
    (快3点了,想了一夜,我倒!)
      

  4.   

    大多数模板都是字符串替换原理, 包括大名鼎鼎, N 年前就已经很成熟的 smarty.至于你后来说的那个方法, 看你的代码:a.php
    <?php require_once("b.php");?>
    <html>
    <head>
    <title><?php show_title();?></title>
    </head>
    <body>
    <?php show_body();?>
    </body>
    </html>这个不仍旧是 html 和 php 结合在一起 ? 只不过原本是 php 包含 html, 现在改成了 html 里面包含 php.这个模板乍一看似乎没什么不好, 但潜在问题有很多.1. 每次显示 php 内容的时候要调用 <?php 某函数() ?> 这样一来你必须使用 ob_start() 来控制输出, 否则频繁的 echo 会导致页面渲染速度飞降, 长达 1, 2 秒也有可能.2. 你给出的例子代码中只提到了 show_title(); 这种简单文本输出, 如果要输出一个大表格, 表格有 100 个单元, 你不可能用上述方法来逐个显示表格单元吧 ? 你只能制定一个函数输出表格整体, 这样你的 php 代码里面又不可避免要有 "<table>", "<tr>", "<td>" 的 html
      

  5.   

    反对上面BS楼主的话,不管怎么说,楼主的确是在思考,这是好事了.楼主的想法是有一定道理的.不过,PHP里已经有许多现成的东西可以达到你想要的效果,诸如smarty及smartTemplate等等.楼主可以找一些这方面的代码来看看
      

  6.   

    “最初的想法是使用INCLUDE,可是一个页面包含的内容太多用起来很显然不现实,要写太多的模块,而且不利于执行效率。”
    Discuz!、phpwind就是这么做的,并没有什么不爽。至少他们还在不断的推出新版本。“后来又在网上找到各种模板技术,什么PHPLIB等等,感觉用起来有些不爽。我想到以前生成静态HTML时,读入一个HTML模板,然后替换相应内容生成HTML页,用这个方法来实现HTML与PHP的分离不是更好吗?先读入一个HTML模板,然后使用REPLACE替换掉相应设置好的TAG,然后ECHO这个替换后的字符串变量到浏览器,这样多简单啊??”
    是的是很简单,PHPLIB就是这么做的。你不是“感觉用起来有些不爽”吗?至于编译型的模板引擎smarty及smartTemplate等,你根本就没有接触。现在就加以评论还为时过早吧?!
      

  7.   

    我一直用discuz的模版系统,感觉还好
      

  8.   

    最好的模板还是 XSLT 写的.程序只要负责输出数据足以, 连什么编译, 解析都不用了.输出的 XML 格式还可以用于 Web Service 等项目, 一举多得.
      

  9.   

    <script language='javascript'>
    alert('ok');
    </script>
      

  10.   

    我有一个想法,抛弃诸如smarty此类的php模板,抛弃字符串替换,使用ajax技术来定义网页的表现。将原来的*.css文件替换为*.xml,将各个元素(id,class)存储在xml文件中,用相应的后台程序读取xml文件,然后发送给客户端。我用php的simpleXML来读取xml文档,并发送给客户端
      

  11.   

    俺最近刚接触PHP ,是个论坛,,vBulletin里面 的php文件,一个html代码都没有,,看起来都头晕了..那些个显示页面的布局元素,,都是建立数据库的时候从xml文件给导入进去的呃......
      

  12.   

    俺的第1贴 一个smarty应用
    news.php
    <?php
    include "smarty.class.php";
    $smarty = new smarty();
    $sql = "select * from news limit0,10";
    $news = $DB->getRows($sql); //DB类返回数组
    $smarty->assige("news",$news);//替换模版中的news
    $smarty->display("news.tpl.htm");//加载模板
    ?>news.tpl.htm
    <html>
    <li>标题</li>
    {section name=i loop=$news}//需替换的内容 循环数组$news
    <li>{$news[i].title}</li>//显示数组内容 --标题
    {/section}//结束循环
    </html>
    假设数据结构有 字段title--标题
      

  13.   

    ten789() 
    你的第一贴毛好毛好
      

  14.   

    模板a.html
    <html>
    ...
    <body>
    $abc
    </body>
    </html>
    程序a.php
    <?php
    //一系列操作后$abc="一些要显示的数据";
    require_once("a.html");
    ?>这样做比楼主的想法好啊
    不过还是推荐 用smarty
      

  15.   

    基本要自己写模板的人从来没有仔细看过一个成熟模板的源码。总以为自己写的一定会比他们好得多,这叫自恋。现在的成熟模板都在某一条路上走到了顶点。除非你能设计出新的模式。按他们的老路走是不可能超越他们的。你能做的只是把自己用不上的功能删掉换来性能或是牺牲性能加上自己需要的功能。模板的用户群有多大也是一个很重要的指标。自己写的模板就算能比公用的好一点,你又有多少时间去推广呢?一个smarty模板写的程序很多人都可以快速接手。自己写模板还要别人学这个模板,交接时间要长多少呢?
      

  16.   

    <!--
    <?php
    print<<< HTML
    -->
    <html>
    ...
    <body>
    $abc
    </body>
    </html>
    <!--
    HTML;
    ?>
    -->
      

  17.   

    (适合美工和程序为同一个人)!-----------------------------why do you want to split php with html?????
      

  18.   

    PHP 模板本来是个很简单的东西, 我不赞成搞得太复杂, 像 smarty 这种模板功能很强体积也很大, 不利于性能优化, alexa 排名几千以上的大型站点我还没见过有谁直接用 smarty 的.像 discuz 的模板类就一个小文件大概数十行代码, 足矣. 模板类涉及太多的语法分析或者强调编译功能有何意义? 重新设计了一门模板语言, 还不如直接用 PHP.
      

  19.   

    问题是discuz同样的功能做出来代码并不比smarty小。你把discuz一个页里镶入的所有页面加加看共有多少k吧。
      

  20.   

    smarty不止是一个替换功能,它还包括了缓存、数据转换等很多东西的。discuz花在缓存等东西上的代码可不小。不能单看到discuz的模板类小。
      

  21.   

    PHP版最愿看到的回答,就是唠叨的!
    真知灼见,学习ing
      

  22.   

    建议用smarty或者smarttemplate!呵呵<?php 
    include("Smarty.class.php"); 
    $smarty = new Smarty; $smarty->caching = true; // only do db calls if cache doesn't exist 
    if(!$smarty->is_cached("index.tpl")) {   // dummy up some data 
      $address = "245 N 50th"; 
      $db_data = array( 
                   "City" => "Lincoln", 
                   "State" => "Nebraska", 
                   "Zip" => "68502" 
                 );   $smarty->assign("Name","Fred"); 
      $smarty->assign("Address",$address); 
      $smarty->assign($db_data); } // capture the output 
    $output = $smarty->fetch("index.tpl"); // do something with $output here echo $output; 
    ?>
      

  23.   

    学习smarty  http://ideagrace.com/club/read.php?fid=6&tid=22&fpage=1
      

  24.   

    程序要看用途的,如果是全动态的,可以用smarty,如果生成静态的,根本不是一码事,你下载一个dedecms,看看人家的XML风格的模板,你就知道什么叫MVC了
      

  25.   

    用模板类,SmartTemplate,Smarty都可以,很好用啊.
    万一你真的觉得用别人的模板类不爽,就自己写吧,把要指望开始就把全部写出来,慢慢来吧~啊门!
      

  26.   

    我转到asp.net阵形了,因为它的代码分离和事件处理实在太好了
    用php做到狗一样累
      

  27.   

    这年头高级 PHP 程序员不好找啊, 怪不得起薪都 4000 了.光会摆弄控件的 ASP.NET 程序员倒是一抓一大把, 越来越不值钱.
      

  28.   

    前不久写的代码片断,,,帖一下别笑页面基本上分head,main,foot那样子,main里面有做左中右3块,按参数选择要还是不要,宽度多少。class Page
    { function Page()
    {
    $this->CONF = $GLOBALS['CONF'];
    $this->rD = $this->CONF['root_dir'];
    $this->rP = $this->CONF['root_path'];
    $this->pP = $this->CONF['pic_path'];

    $this->uri = $_SERVER['REQUEST_URI'];

    session_set_cookie_params(time()+123456789);
    session_start();
    } function set($title, $h1, $lPageFile,
    $mWidth = NULL, $rWidth = NULL,
    $rPageFile = NULL, $mPageFile = NULL,
    $headType = 1, $footType = 1, $css='douban001.css')
    {
    /*
    init
    */
    $this->t = $title;
    $this->h1 = $h1;
    $this->lPF = $lPageFile;

    $this->mW = $mWidth;
    $this->rW = $rWidth;

    $this->mPF = $mPageFile;
    $this->rPF = $rPageFile;

    $this->hT = $headType;
    $this->fT = $footType;
    $this->css = $this->CONF['css_path'].$css; function mkPage()
    {
    $this->mkH();
    $this->mkNav();
    $this->mkH1();
    $this->mkL();
    if (!is_null($this->mW)) $this->mkM();
    if (!is_null($this->rW)) $this->mkR();
    $this->mkF();
    }
    function get()
    {
    return $this->p;
    }
    function mkL()
    {
    $this->p .= '<td id="ml" valign="top">'."\n";
    if (!is_null($this->lPF)) require_once($this->lPF);
    $this->p .= '</td>'."\n";
    }

    function mkM()
    {
    $this->p .= '<td id="mm" width="'.$this->mW.'">';
    echo $this->mPF;
    if (!is_null($this->mPF)) require_once($this->mPF);
    $this->p .= '</td>'."\n";
    }

    function mkR()
    {
    $this->p .= '<td id="mr" valign="top" width="'.$this->rW.'">'."\n";
    if (!is_null($this->rPF)) require_once($this->rPF);
    $this->p .= '</td>'."\n";
    }
    }
    index.php里面<?php
    //FINISHED
    require_once('includes/config.php');
    require_once($CONF['class_dir'].'class_page.php');$page = new Page();
    $page->set('title显示什么','这里是一个h1的标题', 'index_l.php', 60, 350, 'index_r.php');
    echo $page->get();index_l.php和index_r.php分别是include进来的两个页面,里面只有一个heredoc方式的赋值(赋给$this->p)
    ?>
      

  29.   

    好,代码和HTML分离一般拥有:
    纯HTML+PHP分离法(就是PHP不替换Template中架构)
    类似Smarty Template方法(就是PHP不替换Template中架构)打一个比方: 一下两个文件
    genvar.php
    $data['var'] = 'a';teplate.php
    <table>
    <tr>
    <td>
    <?php echo $data['var'];
    if ($data['var'] == 'a'){
    ?>
    </td>
    <?php } ?>
    </tr>
    </table>
    以上就是一般的效率最高的无PHP对HTML架构执行对比+替换的方式
    我喜欢用这个
    利用这个让你一生都不要使用echo了....以下的Template是这样的
    supertemplate.tpl
    <td>{tdinfo}</td>
    然后将有一个专门的PHP文件将其中的{tdinfo}替换为其他的东西,这个一般速度较慢,但是加入if then 之类的简单logic之后更容易看懂
      

  30.   

    自己写分离很好阿,用正则替换挺好啊,主要是页面格式千奇百怪,需求要详细分析下,用别人的模板还要学,php最好的地方不就是不用学吗
      

  31.   

    楼主的方法就是PHPLIB中的TEMPLATE
    没有必要重发发明轮子,这就是开源的好处
      

  32.   

    {tdinfo} 比<?=$tdinfo?>就容易懂吗?我个人建议,没特殊需要,不用smarty
      

  33.   

    “{tdinfo} 比<?=$tdinfo?>就容易懂吗?”同样东西,你一个页面写1000个,你就知道哪个容易懂,哪个更整洁了像{tdinfo}这个EL,还是蛮好的,用过jsp的话,会感觉更多些,jsp1.2升级到jsp2.0就将这种EL添加到自己的标准里了,php也应该这么做,不过好像他们还真是没有考虑过,哪天有时间的话,我去给他们上课去,嘎嘎。===================================================
    “没有必要重发发明轮子,这就是开源的好处”我最讨厌的就是听到这种话,轮子要造,要多造,造了也不一定要非用。
      

  34.   

    是的,如果看重smarty带来的诸多好处并且习惯它的语法就用它,简单的用eval也可以实现Template技术。况且pear里也有很多比smarty更简洁的可以用。但个人还是比较喜欢smarty的。
      

  35.   

    有现成的smarty,开源的,下载研究一下吧但是太复杂了,直接用就算了