DexizeR
Новичок
Концепции работы шаблонизатора
Горьким опытом и спорами в конторе было решено писать свой шаблонизатор. Причины:
Известные нам шаблонизаторы работают с шаблонами не так, как хотелось бы нам.
Наши требования:
1. Поддержка динамических и вложенных динамических блоков.
2. Замена переменных на значения.
3. Доступный для верстальщиков синтаксис шаблонов(никаких условий, циклов, кода PHP и т.п.).
4. Самое главное требование - динамический блок можно конкатенировать с любым другим динамическим блоком или переменной в любой момент времени.
Моя концепция. Шаблон разбирается на куски - до динамического блока, тело динамического блока(соответственно если внутри него есть ещё блоки - то происходит рекурсия) и то что после динамического блока.
Реализовал я это с помощью рекурсивной функции которая создает структуру данных следующего формата(для этого примера):
$array[$filename][0] = "html code";
$array[$filename][1][0] = "begin dynamic block1";
$array[$filename][1][1][0] = "dynamic block2";
$array[$filename][1][2] = "end dynamic block1";
$array[$filename][2] = "html code";
Таким образом сами динамические блоки для удобства хранятся так:
$blocks['block_name1'] = &$array[$filename][1];
$blocks['block_name2'] = &$array[$filename][1][1];
С такой структурой, как вы сами видите, можно можно без проблем парсить и дописывать, хоть последовательно, хоть в разнобой, хоть к другим блокам, данные. Так же замечу, что при таком подходе я полностью отказался от регулярных выражений и реализовал всё с помощью функций strpos, str_replace и substr.
Поскольку мне приходится делать это всё одному, то возможно моё решение и не является удачным и существуют лучшие решения, если вы их знаете, пожалуйста, поделитесь. Так же вообще хочется узнать о концепциях парсинга шаблонов.
Горьким опытом и спорами в конторе было решено писать свой шаблонизатор. Причины:
Известные нам шаблонизаторы работают с шаблонами не так, как хотелось бы нам.
Наши требования:
1. Поддержка динамических и вложенных динамических блоков.
2. Замена переменных на значения.
3. Доступный для верстальщиков синтаксис шаблонов(никаких условий, циклов, кода PHP и т.п.).
4. Самое главное требование - динамический блок можно конкатенировать с любым другим динамическим блоком или переменной в любой момент времени.
Моя концепция. Шаблон разбирается на куски - до динамического блока, тело динамического блока(соответственно если внутри него есть ещё блоки - то происходит рекурсия) и то что после динамического блока.
Реализовал я это с помощью рекурсивной функции которая создает структуру данных следующего формата(для этого примера):
$array[$filename][0] = "html code";
$array[$filename][1][0] = "begin dynamic block1";
$array[$filename][1][1][0] = "dynamic block2";
$array[$filename][1][2] = "end dynamic block1";
$array[$filename][2] = "html code";
Таким образом сами динамические блоки для удобства хранятся так:
$blocks['block_name1'] = &$array[$filename][1];
$blocks['block_name2'] = &$array[$filename][1][1];
С такой структурой, как вы сами видите, можно можно без проблем парсить и дописывать, хоть последовательно, хоть в разнобой, хоть к другим блокам, данные. Так же замечу, что при таком подходе я полностью отказался от регулярных выражений и реализовал всё с помощью функций strpos, str_replace и substr.
Поскольку мне приходится делать это всё одному, то возможно моё решение и не является удачным и существуют лучшие решения, если вы их знаете, пожалуйста, поделитесь. Так же вообще хочется узнать о концепциях парсинга шаблонов.