2015-11-25 52 views
2

Twig具有{% spaceless %}标签,该标签将删除HTML标签之间的所有空白区域。我们可以让它在编译时删除空白,而不是在它被渲染时删除空白吗?

但是,当您渲染模板时,它会使用preg_replace执行此操作。罚款小文件,但如果你有一个大型复杂的模板有性能问题。

我觉得应该可以在编译时去掉空白字符?

我编译模板是充满了东西一样

 echo " <h2>Heading</h2> 
"; 

当模板已经包括了以下内容:

<section> 
    <h2>Heading</h2> 
</section> 

我想最终呈现的HTML是

<section><h2>Heading</h2></section> 

为什么不能在构建编译模板的时候添加trim,以获得giv e我们:

echo "<h2>Heading</h2>"; 

在编译的模板php代码中。

我知道在之内填充模板的任何数据中仍然可能有空格,但是我可以轻松地从PHP中控制它。

回答

1

OK,经过多次挖库试图找出哪些文件生成它的输出位,我终于发现了这个“修复”。

变化

->string($this->getAttribute('data')) 

->string(trim(preg_replace('/>\s+</', '><', $this->getAttribute('data')))) 

在/lib/Twig/Node/Text.php 30行。

这样做会正确地给我一个“无空间”输出,但不需要昂贵的模板渲染时间preg_replace调用。

它会导致问题吗?可能在某些使用情况下,可能使用部分<pre><textarea>标记。尽管如此,我看不出这两个问题。

任何我还没有想到的陷阱?

+0

不错的主意,你应该在Symfony或Twig问题队列中提出这个选项。 – JamesWilson

0

您需求的工具,如果空间在模板源是嫩枝的空白控制功能:http://twig.sensiolabs.org/doc/templates.html#whitespace-control

如果空间是在输出显示的变量的存在,你应该使用调整滤波器(或者在将它传递给Twig之前修改该变量,无论如何都会这样做)

+0

我不确定这是正确的工具吗?我正在谈论我的树枝模板中无用的HTML空白。我刚刚编辑了这个问题,使其更清晰一些。 – Codemonkey