To use loops and all, I use alternative syntax for control structures.
Example:
<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>
For more information see this: http://php.net/manual/en/control-structures.alternative-syntax.php
Oh, I also use the semi-MVC structure, where I have a class that processes templates (views), basically it's just a class in which I create an instance, pass in a set of variables, and then render the template when the instance is destroyed. I have an array of variables in this class, and then use extract to pass all the variables to include, for example:
extract($this->variables, EXTR_SKIP); include($this->file);
EDIT: Here is the same example in 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>
source share