删除Smarty中的额外HTML空间

Spa*_*pta 2 smarty smarty3

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

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

<li>
    {if $a == 'A'}
        {$var1}
    {else}
        {$var2}
    {/if}
    <br><span>SUBTEXT</span>
</li>
Run Code Online (Sandbox Code Playgroud)

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

<li>
                            65
                        <br><span>SUBTEXT</span>
        </li>
Run Code Online (Sandbox Code Playgroud)

我希望它更干净,类似于:

<li>
    65<br><span>SUBTEXT</span>
</li>
Run Code Online (Sandbox Code Playgroud)

或更好:

<li>65<br><span>SUBTEXT</span></li>
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Wes*_*rch 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}
Run Code Online (Sandbox Code Playgroud)

输出应该是:

<li>65<br><span>SUBTEXT</span></li>
Run Code Online (Sandbox Code Playgroud)

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


rod*_*ehm 6

您可以加载输出过滤器trimwhitespace.它消除了HTML注释(除ConditionalComments),并降低多个空格到处单一的空间,但是<script>,<pre>,<textarea>.

您可以<two> <tags>通过更改第62行来轻松地使过滤器移除空间.更改

'#(:SMARTY@!@|>)\s+(?=@!@SMARTY:|<)#s' => '\1 \2',
Run Code Online (Sandbox Code Playgroud)

'#(:SMARTY@!@|>)\s+(?=@!@SMARTY:|<)#s' => '\1\2',
Run Code Online (Sandbox Code Playgroud)

你完成了

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

{$some_var = "Hello\nworld"}
{strip}
  -
  {$}
  -
{/strip}
Run Code Online (Sandbox Code Playgroud)

将输出

-hello
world-
Run Code Online (Sandbox Code Playgroud)

而outputfilter将返回

- hello world -
Run Code Online (Sandbox Code Playgroud)