php – mVc世界中的HTML缩进[复制]

前端之家收集整理的这篇文章主要介绍了php – mVc世界中的HTML缩进[复制]前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > How to properly indent PHP/HTML mixed code? [closed]6个
这是一个困扰我一段时间的问题,现在它被认为是缩进HTML代码的一个好习惯,但我有一些保留在MVC模式中缩进代码,这是一个(愚蠢的)示例:

HTML代码

<!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>

我看到这个问题的唯一可行解决方案是使用Tidyoutput buffering,但我想知道它是否值得付出努力,因为它会使处理和加载不必要(?)变慢.此外,这不会使维护HTML代码变得更容易,因为它只会缩进输出而不是缩进源.

我很抱歉这个“基本”的问题,但是过去几年我一直专注于业务逻辑,而且我已经与演示世界脱节了 – 在过去的好时光里,我的HTML代码都没有缩进,但是我再次使用表来设计布局 – 只是想赶上现在.

有关此主题的任何解决方案/见解?

相关问题:

> Do you indent your HTML code?
> Do you generate nicely formatted HTML?
> How to properly indent PHP/HTML mixed code?

如上所述,源代码缩进和输出缩进之间存在差异.源代码的缩进可以与输出的缩进不同,因为输出是动态构造的.编写模板时,源代码的可读性是最重要的.你应该首先关注它!通常输出的HTML缩进是非问题.

话虽如此,两种实用方法可以消除输出中的缩进不匹配:

使用可以正确缩进输出的模板语言

第一个例子是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相反,这仍然允许您在页面结束之前刷新缓冲区以加快长/慢页面.

猜你在找的PHP相关文章