Morgan » 2010.10.17 22:51

Возникла проблема.
Не получается распарсить блоки {if $var}...{/if}.

Код:

1
span style="color: #0000BB"><?php$a = '{if $a}{if $b}a{/if}b{/if}{if $c}c{/if}';preg_match_all('~\{if (.*)\}(.*?)\{\/if\}~sUu', $a, $tags, PREG_SET_ORDER);print_r($tags);?>

:/ :/
Пробовал сначала открывающие теги получить, потом закрывающие и их соединить, но не то.

Nu3oN » 2010.10.18 10:04

тоже интересно...
Только мне еще интересна гибкая елсеиф...
Что бы можно было сколько угодно этих элсеифоф воткнуть

Gemorroj » 2010.10.18 10:26

тут, наверное, думать нужно) в регулярках есть возможность задать рекурсию, значит вложенность, через нее,
например, реализовать можно.

Nu3oN » 2010.10.18 10:52

морган, как вариант закрывающий тег писать с переменной типа
{if $a}
...
{/if $a}

Morgan » 2010.10.18 14:34

Nu3oN
такая практика уже есть, но она неудобная и многословная

Morgan » 2010.10.31 14:49

не получается заюзать рекурсию.

Код:

1
span style="color: #0000BB"><?php$line = '{if a} {if b}test{/if}test1{/if}'; preg_match_all('#\{if (.*)\} (?: (.*) | (?R) ) \{\/if\}#xUsi', $line, $m);print_r($m);?>

--->>>

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Array
(
[0] => Array
(
[0] => {if a} {if b}test{/if}
)
 
[1] => Array
(
[0] => a
)
 
[2] => Array
(
[0] => {if b}test
)
 
)
Gemorroj » 2010.10.31 16:26

тоже что-то не выходит

Morgan » 2010.10.31 17:00

если не {if (.*), все работает на отлично

Morgan » 2010.11.06 22:57

Насколько будет кривой способ?
Просто заменить все "{$if ***}" на "<?php if(***): ?>", а "{/if}" на "<?php endif; ?>", и тд.

Gemorroj » 2010.11.07 13:37

не уверен, но судя по генерируемому Smarty коду, он так и делает)

Morgan » 2010.11.07 18:04

Gemorroj а ты используешь шаблонизатор?
и если да, то какой?

Gemorroj » 2010.11.07 20:00

иногда. Smarty. на данный момент я завяз на 1 большем проекте и развитие как-то приостановилось. топчусь на месте. так что...