kaww
Если $c уже определена {assign var='c' value=0}, будет ли выполняться условие {if !$c}? Или при значении 0 это и есть !$c?
С количеством циклов я, конечно, наворотил, но другого ничего не пришло в голову.
{foreach item=item from=$catalog}
{if $item[2] == $parent}
<div class="parent" id="{$item[0]}">{$item[1]}</div>
{include file="category_tree_test_sub.tpl.html" parent=$item[0] catalog=$catalog}
{/if}
{/foreach}
{assign var='c' value=0}
{foreach item=item from=$catalog}
{if $item[2] == $parent}
{if $c == 0}
{assign var='c' value=1}
<div class=subcat_wrapper_child id={$parent}>
{/if}
<div class="child" id="{$item[0]}">{$item[1]}</div>
{include file="category_tree_test_sub.tpl.html" parent=$item[0] catalog=$catalog}
{/if}
{/foreach}
{if $c !== 0}</div>{/if}
<div class="parent" id="1">id = 1 || parent = 0</div>
<div class="parent" id="2">id = 2 || parent = 0</div>
<div class=subcat_wrapper_child id=2><!-- Обертка для jQuery-сворачивания подразделов -->
<div class="child" id="3">id = 3 || parent = 2</div>
<div class="child" id="4">id = 4 || parent = 2</div>
<div class=subcat_wrapper_child id=4><!-- Обертка для jQuery-сворачивания подразделов -->
<div class="child" id="7">id = 7 || parent = 4</div>
</div>
</div>
<div class="parent" id="5">id = 5 || parent = 0</div>
<div class="parent" id="6">id = 6 || parent = 0</div>