删除Smarty中的额外HTML空间

时间:2012-02-09 07:52:09

标签: smarty smarty3

我们大量使用Smarty进行所有前端模板操作。我观察到以下情况:

当我的Smarty模板类似于以下内容时:

<li>
    {if $a == 'A'}
        {$var1}
    {else}
        {$var2}
    {/if}
    <br><span>SUBTEXT</span>
</li>

传递给浏览器的最终HTML是:

<li>
                            65
                        <br><span>SUBTEXT</span>
        </li>

我希望它更干净,比如:

<li>
    65<br><span>SUBTEXT</span>
</li>

或更好:

<li>65<br><span>SUBTEXT</span></li>

无论如何,我可以在Smarty 3中使用一些配置设置吗?是否有任何设置来格式化和清理最终创建的HTML?

由于

3 个答案:

答案 0 :(得分:7)

您可以使用{strip}删除模板部分中的所有空格和回车符:

http://www.smarty.net/docsv2/en/language.function.strip.tpl

{strip}
<li>
    {if $a == 'A'}
        {$var1}
    {else}
        {$var2}
    {/if}
    <br><span>SUBTEXT</span>
</li>
{/strip}

输出应为:

<li>65<br><span>SUBTEXT</span></li>

这可能不方便,但请注意,空格和换行符对HTML输出具有重要影响/重要性,并且全局剥离它们可能会产生意想不到的副作用。

答案 1 :(得分:6)

您可以加载输出过滤器trimwhitespace。它会删除HTML注释(ConditionalComments除外)并将多个空格减少到任何地方的单个空格,但<script><pre><textarea>

您可以通过更改第62行来轻松地使过滤器删除<two> <tags>之间的空格。更改

'#(:SMARTY@!@|>)\s+(?=@!@SMARTY:|<)#s' => '\1 \2',

'#(:SMARTY@!@|>)\s+(?=@!@SMARTY:|<)#s' => '\1\2',

你已经完成了。

输出过滤器在呈现模板后运行,然后发送到浏览器。 {strip}在模板处理之前运行 - 这是编译时的事情。以下是

{$some_var = "Hello\nworld"}
{strip}
  -
  {$}
  -
{/strip}

将输出

-hello
world-

而outputfilter将返回

- hello world -

答案 2 :(得分:1)

如果要从所有文件中删除空格,请简单调用:

$oSmarty->loadFilter("output", "trimwhitespace");
$oSmarty->display($display);

进一步了解PHP类:smarty_outputfilter_trimwhitespace和docs: http://www.smarty.net/docs/en/advanced.features.outputfilters.tpl