Интеллектуальные отступы и формат кода

#php #html #format #smarty

#php #HTML #формат #smarty

Вопрос:

могу ли я создать красивый HTML с помощью 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>
  

Это может привести к чему-то вроде этого

                                   <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
                                            amp;nbsp;<span> | </span>amp;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
                                            amp;nbsp;<span> | </span>amp;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

2. Также вам следует отделить логику вашего приложения от его представлений (шаблонов), постарайтесь следовать шаблону MVC, это сделает все более читаемым.

3. итак, в движке шаблонов (smarty) для языка шаблонов (php) я должен использовать еще одно разделение логики / представления?

4. {{if $i == 3}} {{assign var="i" value="0"}} {{else}} {{assign var="i" value=$i 1}} На самом деле это выглядит не очень красиво. Например, в Rails вы бы заменили это вспомогательным методом, определили этот код в другом месте и использовали вспомогательный метод, например {{show_karma}} вместо этого кода в шаблоне.

5. Для меня, с моим опытом, выглядит странно, но если он используется в RoR, я думаю, что иногда это должно быть правильно. Возможно, я поищу это позже, спасибо за ответ

Ответ №1:

В зависимости от того, как вы хотите его отформатировать, вы можете использовать функцию {strip}: http://www.smarty.net/docs/en/language .функция.stripe.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>
  

Ответ №2:

Например:

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