#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;