RadaR
Новичок
вложенные циклы в шаблонах.
я написал вот такой парсер, однако он не может обрабатывать вложенные циклы if..
помогите, пожалуйста обработать это шаблон.
мучаюсь уже много дней, все никак не получается..
я написал вот такой парсер, однако он не может обрабатывать вложенные циклы if..
PHP:
$tag_content="
<select name=sort>
<option value=desc{IF %2==desc} selected{/IF}>По убыванию</option>
<option value=asc{IF %2==asc} selected{/IF}>По возрастанию</option>
</select>
{IF %7>1}
<div id=pages>
<a href=%1&sort=%2&pp=%3&page=1>Начало</a>
{IF %6==%i}
<span id=active>%i</span>
{ELSE}
<a href=%1&sort=%2&pp=%3&page=%i>%i</a>
{/IF}
<a href=%1&sort=%2&pp=%3&page=%7>Конец</a>
</div>
{/IF}
<br>";
$pattern='%(.*?)\s*{if\s+(.+?)}(.*?)\s*(?:{else}(.*?)\s*)?{/if}(.*?)%is';
//$1=текст до условия
//$2=само условие
//$3=текст если условие верно
//$4=текст, если условие неверно
//$5=текст после условия (почему-то эта переменная все время пустая)
if(preg_match_all($pattern,$tag_content,$m,PREG_SET_ORDER))
{
while(list($key,$match)=each($m))
$ie_content.=MYFUNCT(array($match[1],$match[2],$match[3],$match[4],$match[5]),$param);
//MYFUNCT заменяет шаблонные переменные вида %x, на переменные из скрипта, компилируется уловие
$pattern='%(.*){/if}(.*)%is';
//текст после последнего {/if}. таким образом я обошел $5
if(preg_match($pattern,$tag_content,$m1))
$ie_content.=$m1[2];
return $ie_content;
}
мучаюсь уже много дней, все никак не получается..