MasterSID
Новичок
Парсер шаблонизатор
Решил написать свой незамысловатый шаблонизатор и столкнулся с небольшой проблемкой.
Принцип работы шаблонизатора:
1. Определяем главный файл шаблона
2. Собираем в отдельном массиве-члене класса шаблонизатора пары [переменная_шаблона]=>парсируемый текст
3. Парсим в файл шаблона все эти переменные
4. Делаем вывод.
Парсится все последовательно: шерстим массив с собранными парами переменная=>содержимое и заменяем перменную на содержимое.
Так вот проблема в том, чтобы парсить только те конструкции типа {TITLE}, {BODY} и т.д., которые содержатся именно в файлах шаблонанов, но не парсить эти конструкции, содержащиеся в парсируемом тексте.
То есть, допустим такой вариант:
Файл шаблона:
-------------------------------
{TITLE}<br>{BODY}
-------------------------------
Алгоритм скрипта:
-------------------------------
Читаем файл шаблона
Регистрируем пару "{TITLE}"=>"Новый Заголовок {BODY}"
Регистрируем пару "{BODY}"=>"Тело документа"
Парсим по описанному выше алгоритму и выводим в браузер.
-------------------------------
т.к. все идет последовательно, то в шаблон сначала парсится {TITLE} и мы получаем такое содержимое буфера:
Новый Заголовок {BODY}<br>{BODY}
Далее в массиве идет переменная {BODY} и, поскольку она в буфере встречается уже дважды, то и парсится 2 раза. Как с этим бороться? Причем нужно дать возможность использовать конструкции типа {ПЕРЕМЕННАЯ} в парсируемом тексте без ограничений.
Решил написать свой незамысловатый шаблонизатор и столкнулся с небольшой проблемкой.
Принцип работы шаблонизатора:
1. Определяем главный файл шаблона
2. Собираем в отдельном массиве-члене класса шаблонизатора пары [переменная_шаблона]=>парсируемый текст
3. Парсим в файл шаблона все эти переменные
4. Делаем вывод.
Парсится все последовательно: шерстим массив с собранными парами переменная=>содержимое и заменяем перменную на содержимое.
Так вот проблема в том, чтобы парсить только те конструкции типа {TITLE}, {BODY} и т.д., которые содержатся именно в файлах шаблонанов, но не парсить эти конструкции, содержащиеся в парсируемом тексте.
То есть, допустим такой вариант:
Файл шаблона:
-------------------------------
{TITLE}<br>{BODY}
-------------------------------
Алгоритм скрипта:
-------------------------------
Читаем файл шаблона
Регистрируем пару "{TITLE}"=>"Новый Заголовок {BODY}"
Регистрируем пару "{BODY}"=>"Тело документа"
Парсим по описанному выше алгоритму и выводим в браузер.
-------------------------------
т.к. все идет последовательно, то в шаблон сначала парсится {TITLE} и мы получаем такое содержимое буфера:
Новый Заголовок {BODY}<br>{BODY}
Далее в массиве идет переменная {BODY} и, поскольку она в буфере встречается уже дважды, то и парсится 2 раза. Как с этим бороться? Причем нужно дать возможность использовать конструкции типа {ПЕРЕМЕННАЯ} в парсируемом тексте без ограничений.