fenom-template / fenom

Template Engine for PHP. Maintainers wanted!
Other
446 stars 108 forks source link

Рекурсия в макросе из родительского шаблона #75

Closed alexandr-v closed 10 years ago

alexandr-v commented 10 years ago

Приветствую) столкнулся со следующей проблемой: есть два шаблона:

test-child.html

{extends 'test-parent.html'} 
{block 'child'}
    {macro child_test(v, i)}
        child test - {$v}, i = {$i};<br/>
        {var $i = $i -1}
        {if $i > 0}
            {macro.child_test v=$v i=$i}
        {/if}
    {/macro}

    child call: <br/>
    {macro.child_test v = 'ok' i = 5}
{/block}

и собственно сам test-parent.html:

{macro parent_test(v, i)}
    parent test - {$v}, i = {$i};<br/>
    {var $i = $i -1}
    {if $i > 0}
        {macro.parent_test v=$v i=$i}
    {/if}
{/macro}

{block 'child'}{/block}

parent call:<br/>
{macro.parent_test v = 'ok' i = 5} <br/>

Что получается: child call: child test - ok, i = 5; child test - ok, i = 4; child test - ok, i = 3; child test - ok, i = 2; child test - ok, i = 1; parent call: parent test - ok, i = 5;

Скорее всего там должен быть обычный \RuntimeException('macro not found'), но это сути не меняет))) макрос не найден... на первой же рекурсивной итерации.

Хочу заметить, что в шаблоне test-child.html при работе макроса метод \Fenom\Render->getMacro($name) ни разу не вызывается. Если это поможет конечно чем-то.

Версия - 1.4.8

bzick commented 10 years ago

Да, опечатку с RuntimeException я исправил, но в версии 2.0, пожалуй сделаю релиз 1.4.9. По поводу макроса, тут походу баг макрос+наследование. unti-тест покажет.

bzick commented 10 years ago

Массив макросов заменялся у родительского шаблона на массив дочернего шаблона. Теперь при наследовании все шаблоны используют один массив макросов, дополняя его по мере наследования.

bzick commented 10 years ago

Исправлено в 1.4.9

alexandr-v commented 10 years ago

Ооо!) спасибо огромное! оперативно)