【问题标题】:Rendering clean & tidy HTML with TWIG templates使用 TWIG 模板呈现干净整洁的 HTML
【发布时间】:2012-08-09 07:35:37
【问题描述】:

我一直在使用Twig(版本1.9.1)作为PHP 模板引擎,我对渲染的HTML 并不完全满意,因为添加了额外的不需要的换行符和空格使结果非常混乱。为了使我的模板更加灵活,我使用了macros,它可以以嵌套方式相互调用,这本身工作正常,但似乎使事情变得更糟。例如,<a> 元素呈现如下:

             <a href="http://google.com" alt="some alternative text">                    some text with <strong>some html</strong>



</a>

我知道部分原因是我的twig 模板的格式设置方式,就像我删除空行并从中缩进一样,呈现的HTML 看起来更整洁,但并不完全:下面的输出显示了一个渲染的&lt;a&gt;,在元素的开始和结束之间仍然有2个换行符,尽管相应的模板不包含任何空行或空格!

<a href="http://google.com" alt="some alternative text">some text with <strong>some html</strong>


</a>

尽管有帮助,但从我的 twig 模板中删除格式(即空行和缩进)并不是一个真正的选择,因为它使我的模板很难阅读和维护。

除了从模板中删除格式。使用Twig 呈现更干净/整洁的 HTML 的方法是什么?

【问题讨论】:

  • 如果您想绝对控制输出中的空白,只需使用 PHP。 TBH 我一直不明白为什么像 Twig 和 Smarty 这样的 PHP 模板引擎甚至存在,PHP 被设计为本身就是一个 HTML 模板引擎,虽然以这种方式使用它有点冗长与这些抽象层中的任何一个相比,它使您能够更好地控制最终结果发生的事情。 With just one more layer of abstraction, I can take over the world!
  • 从前端 POV 我看到了模板引擎的好处:语法更易于人类阅读/直观 + 引擎之间的相似性,即使来自不同的语言(Django:docs.djangoproject.com/en/1.4/topics/templates,Twig:@987654325 @) 这必须有助于处理不同的项目。从后端 POV 来看,我看到了引擎内部例程(例如转义)的好处,这些例程有助于一致且安全地呈现内容。但是在我的情况下,我认为使用纯 PHP 会更好,因为我可以自己做一些更简单、更快的事情。
  • @DaveRandom 那时您显然从未从事过 SAAS 风格的项目——您的观点非常狭隘。以托管网站系统为例,我们只说它是一个托管博客。如果托管用户想要编辑设计会发生什么?如果你允许他们使用 PHP,那你就是个白痴,所以 Twig 是一个理想的候选者,尤其是它的沙盒。

标签: php templates twig


【解决方案1】:

该文档页面应该可以帮助您控制标签http://twig.sensiolabs.org/doc/templates.html#whitespace-control中的空格

【讨论】:

  • 我不认为那是他的意思或需要,您可以删除所有空格或在前面或末尾删除它。但他只想要干净的结构化 html,而那不是(还)可以使用 twig 的空白控制。
  • OP 从来没有回复说任何一种方式,但确实接受了答案。
【解决方案2】:

我也想要正确的输出缩进,所以我为此做了一个扩展。我提供了一个要点:https://gist.github.com/urraka/ccd1812570ca4b278b9f

请参阅 gist 中的使用文件以获得一些解释。

基本上,这个模板:

{# Given variable = "line1\nline2\nline3" #}

<body>
    {% if true %}
        <stuff>{% if true %}only blocks that take the whole line have effect{% endif %}</stuff>
        {{ variable }}
    {% endif %}
</body>

最终会是这样:

<body>
    <stuff>only blocks that take the whole line have effect</stuff>
    line1
    line2
    line3
</body>

【讨论】:

  • 换句话说,即使在 2017 年,香草 Twig 也不可能?无论如何,在扩展方面做得很好!在我看来,这应该是公认的答案。
【解决方案3】:

虽然这个bundle不再维护,但它可能是一个开始用tidy_parse_string()编写一个整洁的服务。 KnpMarkupValidatorBundle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 2012-09-22
    • 2021-01-07
    • 2012-06-29
    • 2016-08-10
    • 1970-01-01
    • 2010-11-29
    相关资源
    最近更新 更多