混合php和html

时间:2009-10-16 07:56:11

标签: php

如果我可以要求答案不要指向框架或其他图书馆,我将不胜感激。我知道这些,并且根据快速小黑客的经验更多地回答。

从一些基础html开始

 <html>
      <head>
           <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
           <title>Page Title</title>
      </head>
      <body>
         // something is going to happen here, could be more html, or php
      </body>
 </html>

假设您将拥有数百页,当然,您希望以较少的代码重复方式对其进行模块化。

我已经看过,使用过并且辩论了许多策略。

基本包括方法:

的header.inc.php

 <html>
      <head>
           <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
           <title>Page Title</title>
      </head>
      <body>

footer.inc.php

      </body>
 </html>

所有数百个php页面的存根:

<?php include 'header.inc.php'; ?>
    // html or other php can go here
<?php include 'footer.inc.php'; ?>

获得更多花哨,并且有一个var.inc.php,你可以设置$ page_title并将其放在第一个包含前面,从而节省编辑数百页的时间。

函数方法:

show.inc.php

function display_header($page_title) {
     echo "
     <html>
          <head>
               <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
               <title>$page_title</title>
          </head>
          <body>";

}

你对页脚做同样的事情,我怀疑你明白了。我知道你们当时很多人都在考虑对象,我也想避免讨论这个问题。

考虑一下你正试图教一个非常小的孩子一些原则,或者你试图让一个设计师进入某种形式的现代时代。

哪种方法,你开始遇到你要在浏览器中查看html和php输出的情况。浏览器的源输出有一个非常清晰的选项卡缩进和结构。大多数时候,看一下网站的来源,我看到html非常糟糕。所有一行,或不同形式的缩进。

如何以简单的方式解决这个问题?

这个display_header()函数会在整个地方或空格中吐出,这取决于你的编辑器,它会使渲染的输出变得一团糟。

有这个选项:

function display_header($page_title) {
    echo '<html>';
    echo '<head>';
    echo "\t" . '<meta http-equiv="Content-type" content="text/html; charset=utf-8" />';
    echo "\t" . '<title>' . $page_title . '</title>';
    echo '</head>';
    echo '<body>';

}

然后,你会遇到以下情况:

 echo '<table>';
 foreach ($variable as $item) {
      echo '<tr><td>' . $item . '</td></tr>';
 }
 echo '<table>';

 echo "\t" . '<table>' . "\n";
 foreach ($variable as $item) {
      echo "\t\t". '<tr><td>' . $item . '</td></tr>' . "\n";
 }
 echo "\t" . '<table>' . "\n";

现在,你刚刚把你的php搞得一团糟。所以我开始考虑输出缓冲区,并且我将完全让设计师对这个概念感到不满。但我只是将更多的html与php混合在一起,我很自豪。

老实说,我从来没有能够解决这个问题:

<?php foreach ($variable as $item) { ?>
 ....
<?php } ?>

两者都会产生更好的生成html,但对我来说,它也会产生更复杂的php文件。非常基本的问题,我相信会有一些强烈的意见,并希望推动框架和OOP。我理解这些方法,但同样,我正在寻找最佳建议,为那些永远不会对编程充满热情的人提供一些工具,并且只是希望以有助于提高效率的方式完成工作。

4 个答案:

答案 0 :(得分:6)

在编写PHP时忘掉HTML输出的缩进。否则你会花费太多时间来担心一些完全无足轻重的事情。

如果您需要清理HTML输出以使设计人员更容易阅读,请通过Tidy运行它。如果这看起来效率低下,请记住,您只需要在开发中进行此操作,而不是在生产中。

答案 1 :(得分:1)

如果您在查看源代码时真正关心HTML布局,那么可以查看PHP Tidy,如果您构建HTML,则可以使用各种选项(如缩进和许多其他配置)输出它。

请参阅http://us3.php.net/manual/en/book.tidy.php

答案 2 :(得分:1)

随着您的代码越来越复杂,您的设计越来越复杂,我想您会发现模板就是答案。最后,演示应该与逻辑分开,这是MVC模型的核心。

我个人喜欢Smarty

答案 3 :(得分:1)

我认为你应该重新评估你对最后一段片段的厌恶。 PHP是最好的模板语言。当您以这种方式使用它时,您可以轻松地获取设计模型并转换为动态页面。您也可以使用标准的HTML工具,查看ZenCoding以获取我正在谈论的内容的示例。您可以使用正确的语法突出显示和所有其他好东西。你也可以毫不费力地保持一些缩进和一致性的外观。

现在我理解你因为变得凌乱和丑陋而感到紧张。关键是将复杂逻辑从模板中移出到单独的纯PHP文件中,以使模板文件感觉更像HTML而不是PHP。 iddqd建议使用Smarty作为模板语言,但我从未喜欢过Smarty。我相信它最终只是一个毫无意义的重定向而不是一个有用的抽象。

在所有编程语言中,PHP是最好的模板语言之一。没有必要将其颠覆为任何其他编程语言。