Для использования циклов и всего, я использую альтернативный синтаксис для структур управления.
Пример:
<div id="messages"<?php if(!(isset($messages) && count($messages))): ?> class="hidden"<?php endif; ?>>
<?php if(isset($messages)): ?>
<?php foreach($messages as $message): ?>
<div class="message"><?php echo $message; ?></div>
<?php endforeach; ?>
<?php endif; ?>
</div>
Для получения дополнительной информации см .: http://php.net/manual/en/control-structures.alternative-syntax.php
Кроме того, я использую полу-MVC структуру, где у меня есть класс, который обрабатывает шаблоны (представления), в основном это просто класс, для которого я создаю экземпляр, передаю набор переменных, а затем визуализирую шаблон, когда экземпляр уничтожен. У меня есть массив переменных в этом классе, и затем я использую extract для передачи всех переменных во включаемом файле, например так:
extract($this->variables, EXTR_SKIP);
include($this->file);
РЕДАКТИРОВАТЬ: Вот тот же пример в Smarty:
<div id="messages"{if isset($messages) && !count($messages)} class="hidden"{/if}>
{if isset($messages)}
{foreach from=$messages item=message}
<div class="message">{$message}</div>
{/foreach}
{/if}
</div>