Отличия MACRO от WACT-а

Пример MACRO-шаблона:

 <ul>
   <li><a href='{{route_url params="controller:member_home,action:personal"}}'>Изменить личные данные</a></li>
   <li><a href='{{route_url params="controller:member_home,action:change_password"}}'>Сменить пароль</a></li>
 </ul>
 
{{list using='$tags' as="$item"}}
<ul id='tags'>
{{list:item}}
<li><a href='/photo_category/item/{$#category.id}?tag={$item.id}' style="font-size:<?=($item['weight']+3)?>">{$item.title}</a></li>
{{/list:item}}
</ul>
{{/list}}
{{list using='$tags' as="$item"}}
<ul id='tags'>
{{list:item}}
<li><a href='/photo_category/item/{$#category.id}?tag={$item.id}' style="font-size:<?=($item['weight']+3)?>">{$item.title}</a></li>
{{/list:item}}
</ul>
{{/list}}
 
<?php // Теперь аналог на php
 
if(count($tags)) { ?>
<ul id='tags'>
<?php foreach($tags as $item} { ?>
<li><a href='/photo_category/item/<?php echo $this->category['id']; ?>?tag=<?php echo $item['id']; ?>' style="font-size:<?php echo($item['weight']+3)?>">
<?php echo $item['title']; ?>
</a>
</li>
<?php } ?>
</ul>
<?php } ?>

(На самом деле код немного сложнее для обеспечения работы тегов list:empty, list:fill и других, но принцип должен быть понятен).

MACRO шаблон:

 {{form name="my_form"}}
 <?php $ds = $this->form_my_form->getDatasource();
  if(isset($ds["value"])) echo $ds["value"]; ?>
 {{/form}}
 

Управляющий php-код:

  $page = new lmbMacroTemplate('my_template.phtml');
  $page->set('form_my_form_datasource', array("value" => 1111)); 

В принципе, если вы работаете с пакетом VIEW, то о передаче данных и ошибок валидации в runtime-компоненты форм заботится lmbMacroView.