mVc世界中的HTML缩进

Ali*_*xel 6 html php model-view-controller tidy indentation

这是一个困扰我一段时间的问题,现在它被认为是缩进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>
Run Code Online (Sandbox Code Playgroud)

要正确缩进,第一次调用h1视图(或部分)应该返回:

\t<h1>I am a Level 1 Header</h1>
Run Code Online (Sandbox Code Playgroud)

第二次调用h1视图时应该返回:

\t\t\t\t<h1>I am a Level 1 Header Inside a Table</h1>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

根本没有缩进解决了所有问题,但它也使得阅读和维护更加困难:

<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>
Run Code Online (Sandbox Code Playgroud)

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

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

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


相关问题:

Daf*_*aff 5

我会说,HTML源代码缩进之间存在差异.在典型的MVC视图中,您使用源代码,我认为应该以可读的方式缩进.

实际的HTML输出虽然是另一回事.当然,混乱地缩进源看起来有点不专业(这就是为什么我有时会删除任何缩进,但通常涉及你说的一些HTML后处理),但对于浏览器本身如果根本不重要,如果我真的需要查看源代码,我将使用格式化程序或Firebug,它以格式良好的方式显示所有DOM元素.

  • 源代码缩进是在您实际编写的代码中使用缩进.HTML缩进在浏览器接收的输出中使用缩进.这些并不总是与您的源代码缩进以遵循源代码流程相同,但实际的输出代码可能根本不遵循这一点(正如您的原始问题所述). (3认同)

mol*_*olf 4

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

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

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

第一个例子是Haml,它是 Ruby 的一种模板语言。它需要一个这样的模板:

%body
  %h1 I am a Level 1 Header
  %table
    %tr
      %td
        %h1 I am a Level 1 Header Inside a Table
Run Code Online (Sandbox Code Playgroud)

输出将是格式整齐的 HTML,类似于您的示例,并且全部正确缩进。

这种方法的一个明显缺点是,您并不是真正在模板中编写 HTML,而是使用另一种具有类似 HTML 语义的语言进行编写。这可能是一个问题,取决于谁将维护视图。

从输出中去除所有多余的空格,根本不缩进

某些模板语言具有删除所有多余空格的选项。Smarty for PHP 有一个空白修剪插件例如,它通过故意使所有输出同样不缩进,完全解决了输出美化问题。它还节省了非常少量的带宽。

ob_start()仅限 PHP 的解决方案是与其处理程序一起使用$output_callback此处有记录)。您可以编写一个简单的回调来去除过多的空格,类似于 Smarty 插件。与在输出回调中使用 Tidy 相反,这仍然允许您在页面结束之前刷新缓冲区以加快长/慢页面的速度。