2

我们在所有前端模板中大量使用 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?

谢谢

4

3 回答 3

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 输出有重大影响/重要性,全局剥离它们可能会产生意想不到的副作用。

于 2012-02-09T08:00:19.380 回答
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-

而输出过滤器将返回

- hello world -
于 2012-02-09T08:23:44.487 回答
1

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

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

更多信息请查看 PHP 类:smarty_outputfilter_trimwhitespace和文档: http ://www.smarty.net/docs/en/advanced.features.outputfilters.tpl

于 2013-08-08T18:35:54.433 回答