Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Начал писать свой шаблонизатор(мини)
Тут пока только 1 метод, над другими еще думаю, что вы скажете, что сразу переделывать(и почему)... Просто не хочется, чтобы потом все накрылось) (Добавление)
Работает он так: папка templates в ней папки с шаблонами default, и.т.д
В папке с шаблоном
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
На мой взгляд написание "подстановочных" шаблонизаторов непрактично в соотношении затраченного на разработку времени к его функциональным возможностям. Допустим нам нужно вывести таблицу. Скрипт располагает данными в виде массива. Как его вывести в шаблоне? Приходит в голову решение вроде такого:
Соответственно нужно писать синтаксический анализатор. А потом еще и компилятор в php-код. Ведь не будете же вы при каждом обращении парсить шаблоны?
В результате имеем много потраченного времени на изобретения велосипеда, который по функционалу и рядом не валяется с такими шаблонизаторами как smarty или twig.
Согласен, что для простых проектов smarty бывает излишен, и хочется написать что-то простое и свое.
И считаю, что для таких шаблонизаторов лучше всего использовать нативный php в сочетании в ob-функциями.
----- Чем больше узнаю, тем больше я не знаю.
Okula
Отправлено: 19 Февраля, 2012 - 21:51:36
Участник
Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010
Помог: 42 раз(а)
А я написал себе шаблонизатор который распознаёт переменные обозначенные через точку как массив и имеет возможность прокручивания информации в цикле без перезагрузки шаблона
DelphinPRO
Отправлено: 19 Февраля, 2012 - 22:14:41
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
т.е. синтаксический анализ все равно пришлость делать?
----- Чем больше узнаю, тем больше я не знаю.
etoYA
Отправлено: 19 Февраля, 2012 - 22:28:16
Участник
Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011 Откуда: Крым
Помог: 21 раз(а)
DelphinPRO, да я не буду делать циклы, и.т.д Мне главное вставить переменную, возможно условие, и собрать в кучу шаблоны. Сбор в кучу вообще нормально реализован?
Okula
Отправлено: 19 Февраля, 2012 - 22:40:27
Участник
Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010
Помог: 42 раз(а)
DelphinPRO пишет:
т.е. синтаксический анализ все равно пришлость делать?
Ну када же без этого
Разбор делал с помощью регулярок, вот только кэш дописать всё времени нет.
OrmaJever
Отправлено: 20 Февраля, 2012 - 01:36:44
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
мне кажется шаблонизаторы такого типа вобще бред, писать посути интерпретатор на интерпретируемом языке это слишком. Нужно делать как в wordpress.
<?=$content;?> место {content} и шаблонизатора, и жизнь прекрасна.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
DelphinPRO
Отправлено: 20 Февраля, 2012 - 05:46:02
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
etoYA пишет:
Мне главное вставить переменную, возможно условие, и собрать в кучу шаблоны. Сбор в кучу вообще нормально реализован?
Если шаблоны настолько простые будут, то я бы по другому подошел. Сначала регулярками распарсил бы главный шаблон, чтобы выцепить из него все метки типа {METKA}, потом в циклу пробежался бы по полученному массиву меток с проверкой: если файл с таким именем есть, то меняем метку на его содержимое. Если файла нет, просто убираем метку, заменяя ее пустой строкой. В этом случае легче сделать рекурсию, когда в подшаблон нужно вставить еще одну метку.
OrmaJever пишет:
мне кажется шаблонизаторы такого типа вобще бред, писать посути интерпретатор на интерпретируемом языке это слишком.
Такие шаблонизаторы больше похожи на компиляторы Они один раз парсят шаблон и компилируют его в нативный php-код, который кэшируется и в дальнейшем используется до изменения шаблонов. Какой подход лучше - вопрос достаточно холиварный, у обоих есть и плюсы и минусы, которые сотни раз уже обсуждались.
Я наверное обплюю того человека который мне скажет - что это не практично. Так-же есть синтаксис :
<?=$qwe?> - в шаблон можно передать любую переменную и объект.
{CONTENT} - ну и парсер.
Нужно учитывать, что мой шаблонизатор тратит время только первый раз при компиляции, далее он уже готовый шаблон загружается из кэш файла (сейчас делаю поддержку memcache).
DelphinPRO
Отправлено: 20 Февраля, 2012 - 07:44:46
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
sKaa пишет:
У вас очень не далекий взгляд на суть проблемы...
возможно
sKaa пишет:
Я наверное обплюю того человека который мне скажет - что это не практично
это то же самое что и нативный foreach, да и компилируется он наверное в него же?
sKaa пишет:
Нужно учитывать, что мой шаблонизатор тратит время только первый раз при компиляции, далее он уже готовый шаблон загружается из кэш файла
Так оно и должно быть, я писал выше -
DelphinPRO пишет:
Такие шаблонизаторы больше похожи на компиляторы Они один раз парсят шаблон и компилируют его в нативный php-код, который кэшируется и в дальнейшем используется до изменения шаблонов.
На всякий случай еще раз озвучу свою мысль - если приспичило юзать компилирующий шаблонизатор, намного быстрее будет взять тот же Twig, оттестированный и обладающий огромным функционалом, а не изобретать велосипед.
Если нужно что-то простое - нативный синтаксис.
----- Чем больше узнаю, тем больше я не знаю.
sKaa
Отправлено: 20 Февраля, 2012 - 07:48:02
Частый посетитель
Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011 Откуда: Россия г. Нижний Новгород
Помог: 25 раз(а)
[+]
DelphinPRO, бесят twig и smarty своим большим размером, своим хламом, да, что уж там темнить - в принципе бесят чужие, некрасивые решения для тех кто не может сделать сам.
DelphinPRO
Отправлено: 20 Февраля, 2012 - 07:50:42
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
sKaa пишет:
в принципе бесят чужие, некрасивые решения для тех кто не может сделать сам.
знакомо
----- Чем больше узнаю, тем больше я не знаю.
snikers987
Отправлено: 20 Февраля, 2012 - 09:20:46
Участник
Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011 Откуда: Крым
Помог: 25 раз(а)
Ну свой велосипед всегда роднее для своей попы, и блестит, и едет быстрее.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.