我们大量使用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?
由于
答案 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