Smarty缩进和代码格式化

7

我能用Smarty制作漂亮的HTML吗?

我的意思是,如果我采用这个模式(这不是一个可工作的代码,只是一个例子):

<div class="comments-div">
    {{assign var="i" value="0"}}
    {{assign var="tab" value="0"}}
    {{foreach from=$contact.comments item=comment}}
    <div class="comment-text"><p>{{$comment.text}}</p></div>
        {{if $i == 3}}
            {{assign var="i" value="0"}}
        {{else}}
            {{assign var="i" value=`$i+1`}}
        {{/if}}
    {{/foreach}}
</div>

它可能会产生类似于以下的结果。
                                  <div class="tab" id="tab0" style="display: block;">
            <div id="container73">
                <div class="comment-text"><p>c1</p></div>
                <div class="addby">
                    <p>
                    Added by: ASDF at 2011-04-22 15:58:41
                                            &nbsp;<span> | </span>&nbsp;<a class="delete" _id="73">Delete comment</a>

                                            </p>
                </div>
            </div>
                                                                        <div id="container74">
                <div class="comment-text"><p>c2</p></div>
                <div class="addby">
                    <p>
                    Added by: DFGS at 2011-04-22 15:58:44
                                            &nbsp;<span> | </span>&nbsp;<a class="delete" _id="74">Delete comment</a>

                                            </p>
                </div>
            </div>

看看所有这些丑陋的空格和换行

所以问题是:是否有任何实践方法可以避免使用Smarty时出现丑陋的代码?

也许我需要像这样使用一些东西?

<div class="comments-div">
{{    assign var="i" value="0"}}
{{    assign var="tab" value="0"}}
{{    foreach from=$contact.comments item=comment}}
    <div class="comment-text"><p>{{$comment.text}}</p></div>
{{        if $i == 3}}
{{            assign var="i" value="0"}}
{{        else}}
{{            assign var="i" value=`$i+1`}}
{{        /if}}
{{    /foreach}}
</div>

1
XML本身很丑,考虑使用一些更干净的东西,比如phaml - denysonique
此外,您应该将应用程序逻辑与其视图(模板)分开,尝试遵循MVC模式,这将使所有内容更易读。 - denysonique
所以在模板引擎(smarty)中,对于模板语言(php),我必须使用更多的逻辑/视图分离吗? - llamerr
1
{{if $i == 3}} {{assign var="i" value="0"}} {{else}} {{assign var="i" value=$i+1}}这段代码看起来并不美观。例如在Rails中,您可以使用帮助器方法替换它,将此代码定义在其他地方,并在模板中使用帮助器方法{{show_karma}}代替该代码。 - denysonique
对我来说看起来很奇怪,根据我的经验,但如果它在RoR中使用,我认为有时候应该是正确的。也许我以后会去找它,感谢回答。 - llamerr
2个回答

2

根据您想要的格式,您可以使用{strip}函数:http://www.smarty.net/docs/en/language.function.strip.tpl {strip}可以从输出中删除空格。

如果您希望输出在一行上,您可以像这样操作:

{{strip}}<div class="comments-div">
    {{assign var="i" value="0"}}
    {{assign var="tab" value="0"}}
    {{foreach from=$contact.comments item=comment}}
    <div class="comment-text"><p>{{$comment.text}}</p></div>
        {{if $i == 3}}
            {{assign var="i" value="0"}}
        {{else}}
        {{assign var="i" value=`$i+1`}}
        {{/if}}
    {{/foreach}}
</div>{{/strip}}

您可以使用{strip}来删除输出部分的空格:
<div class="comments-div">{{strip}}
    {{assign var="i" value="0"}}
    {{assign var="tab" value="0"}}
    {{/strip}}{{foreach from=$contact.comments item=comment}}
    <div class="comment-text"><p>{{$comment.text}}</p></div>{{strip}}
        {{if $i == 3}}
            {{assign var="i" value="0"}}
        {{else}}
        {{assign var="i" value=`$i+1`}}
        {{/if}}
    {{/strip}}{{/foreach}}
</div>

0

例如:

$html = $smarty->fetch('index.tpl');
$html = preg_replace("#^\s+#m", '', $html);
echo $html;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接