#1 2010.10.17 22:51

Morgan
Участник
Зарегистрирован: 2009.03.31
Сообщений: 333
Карма: 10
Профиль Веб-сайт

Распарсить шаблон

Возникла проблема.
Не получается распарсить блоки {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);?>

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


Натан ротшильд :
Кто владеет информацией, тот владеет миром

Неактивен

#2 2010.10.18 10:04

Nu3oN
Moderator
Откуда: БелгородЭ
Зарегистрирован: 2010.04.28
Сообщений: 805
Карма: 11
Профиль Веб-сайт

Re: Распарсить шаблон

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


Я буду лучше голоден, но между креслом и рулем и на дороге.

Неактивен

#3 2010.10.18 10:26

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Распарсить шаблон

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

Неактивен

#4 2010.10.18 10:52

Nu3oN
Moderator
Откуда: БелгородЭ
Зарегистрирован: 2010.04.28
Сообщений: 805
Карма: 11
Профиль Веб-сайт

Re: Распарсить шаблон

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

Отредактировано Nu3oN (2010.10.18 10:53)


Я буду лучше голоден, но между креслом и рулем и на дороге.

Неактивен

#5 2010.10.18 14:34

Morgan
Участник
Зарегистрирован: 2009.03.31
Сообщений: 333
Карма: 10
Профиль Веб-сайт

Re: Распарсить шаблон

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


Натан ротшильд :
Кто владеет информацией, тот владеет миром

Неактивен

#6 2010.10.31 14:49

Morgan
Участник
Зарегистрирован: 2009.03.31
Сообщений: 333
Карма: 10
Профиль Веб-сайт

Re: Распарсить шаблон

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

Код:

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
)
 
)

Натан ротшильд :
Кто владеет информацией, тот владеет миром

Неактивен

#7 2010.10.31 16:26

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Распарсить шаблон

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

Неактивен

#8 2010.10.31 17:00

Morgan
Участник
Зарегистрирован: 2009.03.31
Сообщений: 333
Карма: 10
Профиль Веб-сайт

Re: Распарсить шаблон

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


Натан ротшильд :
Кто владеет информацией, тот владеет миром

Неактивен

#9 2010.11.06 22:57

Morgan
Участник
Зарегистрирован: 2009.03.31
Сообщений: 333
Карма: 10
Профиль Веб-сайт

Re: Распарсить шаблон

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


Натан ротшильд :
Кто владеет информацией, тот владеет миром

Неактивен

#10 2010.11.07 13:37

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Распарсить шаблон

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

Неактивен

Дополнительно

forum.wapinet.ru

PunBB Mod v0.6.2
0.011 s