这是一个困扰我一段时间的问题,现在它被认为是缩进HTML代码的一个好习惯,但我有一些保留在MVC模式中缩进代码,这是一个(愚蠢的)示例:
<!DOCTYPE html> <html> <head> <title>Testing MVC Indentation</title> </head> <body> <?PHP View('h1','I am a Level 1 Header'); ?> <table> <tr> <td> <?PHP View('h1','I am a Level 1 Header Inside a Table'); ?> </td> </tr> </table> </body> </html>
要正确缩进,首先调用h1视图(或部分)应该返回:
\t<h1>I am a Level 1 Header</h1>
第二次调用h1视图时应返回:
\t\t\t\t<h1>I am a Level 1 Header Inside a Table</h1>
然而,h1视图不知道它所在的缩进范围,那么它到底如何正确地缩回数据呢?此外,忽略视图中的缩进可以公开部分应用程序逻辑(在< div id =“content”>之后检查此页面的HTML源代码,以获得真实示例):
<body> <h1>I am a Level 1 Header</h1> <table> <tr> <td> <h1>I am a Level 1 Header Inside a Table</h1> </td> </tr> </table> </body>
根本没有缩进解决了所有问题,但它也使得阅读和维护更加困难:
<body> <h1>I am a Level 1 Header</h1> <table> <tr> <td> <h1>I am a Level 1 Header Inside a Table</h1> </td> </tr> </table> </body>
我看到这个问题的唯一可行解决方案是使用Tidy和output buffering,但我想知道它是否值得付出努力,因为它会使处理和加载不必要(?)变慢.此外,这不会使维护HTML代码变得更容易,因为它只会缩进输出而不是缩进源.
我很抱歉这个“基本”的问题,但是过去几年我一直专注于业务逻辑,而且我已经与演示世界脱节了 – 在过去的好时光里,我的HTML代码都没有缩进,但是我再次使用表来设计布局 – 只是想赶上现在.
相关问题:
> Do you indent your HTML code?
> Do you generate nicely formatted HTML?
> How to properly indent PHP/HTML mixed code?
使用可以正确缩进输出的模板语言
第一个例子是Haml,一个Ruby的模板语言.这需要一个这样的模板:
%body %h1 I am a Level 1 Header %table %tr %td %h1 I am a Level 1 Header Inside a Table
输出将整齐格式化HTML类似于您的示例,所有正确缩进.
这种方法的一个明显缺点是你并没有真正在你的模板中编写HTML,而是用不同的语言编写类似HTML的语义.这可能是一个问题,取决于谁将维护视图.
一些模板语言可以选择删除所有多余的空格.例如,Smarty for PHP有一个whitespace trimming plugin可以很好地完成这项工作.它完全解决了输出美化问题,故意使所有输出同样不缩进.它还节省了非常少量的带宽.
仅使用PHP的解决方案是将ob_start()与其$output_callback处理程序(即documented here)一起使用.您可以编写一个简单的回调来删除过多的空格,类似于Smarty插件.与在输出回调中使用Tidy相反,这仍然允许您在页面结束之前刷新缓冲区以加快长/慢页面.