вложенные циклы в шаблонах.

RadaR

Новичок
вложенные циклы в шаблонах.

я написал вот такой парсер, однако он не может обрабатывать вложенные циклы 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;
}
помогите, пожалуйста обработать это шаблон.
мучаюсь уже много дней, все никак не получается..
 

Alexandre

PHPПенсионер
jonjonson Не будь так строг, у человека первый пост, и он очевидно хотел сказать: условные операторы.

Всякие вложенные операторы, будь то циклы, процедуры или условные операторы - синтактически обрабытывают, как правило с помощью стека и рекурсии.
 

planarik

Новичок
А зачем такой огород городить ради списка ссылок на страницы? Написал бы функцию и не мучался.
 

Духовность™

Продвинутый новичок
RadaR

какой кошмар.


Скажите пожалуйста, чем конкретно Вас не устраивает следующий вариант шаблонизации (переменные взяты от балды, естественно):

PHP:
<select name=sort>
    <option value=desc<? if($sort=='desc'):?> selected<? endif; ?>>По убыванию</option>
    <option value=asc<? if($sort=='asc'):?> selected<? endif; ?>>По возрастанию</option>
</select>
<? if($var3): ?>
<div id=pages>
    <a href=<?=$varN?>&sort=<?=$sort?>&pp=<?=$varK?>&page=1>Начало</a>
        <? if($varT == $varE): ?>
            <span id=active><?=$varE?></span>
        <? else: ?>
            <a href=<?=$varN?>&sort=<?=$sort?>&pp=<?=$varK?>&page=<?=$varE?>><?=$varE?></a>
        <? endif; ?>
    <a href=<?=$varN?>&sort=<?=$sort?>&pp=<?=$varK?>&page=<?=$varE?>>Конец</a>
</div>
<? endif; ?>
<br>
 
Сверху