Вебмастеру

 
 
9

Что нужно от шаблонизатора?

  • Категория: CMS
Что нужно от шаблонизатора? В моей практике это всего 3 вещи:

1. Удобная вставка переменных в HTML
2. Реализация вывода массивов (например, блоков новостей)
3. Кеширование

Что во вашему ещё жизненно необходимо? Только не говорите...не изобретай велосипед, того что мне нужно я не нашел.

Недавно делал шаблонизатор, все вышесказанные критерии учтены. Получаются такие шаблоны.

Обычная переменная

{text}

Вывод массива news

{foreach:news}
. . . <div class="new">
. . . . . . <h6 class="title">{title}</h6>
. . . . . . {text}
. . . </div>
{/foreach}

Сначала обрабатывается секции вывода массивов, только потом простые переменные. Т.е. переменные внутри вывода массива "локальные". После их обработки, они заменяются на нужные значения и "глобальные" переменные уже не могут их тронуть :)

Используется одна регулярка, но кеширование сглаживает этот тормоз. Кеширование ускоряет шаблонизатор в 2 раза. Обновляется кеш через определённый промежуток времени.
 
 
1

Антон

  • группа: Гости
Леша, глянь как на проделанную мной работу в последнем ее варианте. Это шаблонизатор, который должен стать универсальным. Его идея - всего одно правило - синтаксис шаблона. А уже как ведет себя тот или иной блок или команда - это зависит от того. как мы напишем этот обработчик. Кстати, расширяется он на ура - просто и элегантно.

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

Адрес проекта http://http://code.google.com/p/templum/
 
 
2

Алексей

  • группа: Гости
Мне показалось или в некоторых классах singleton'ы по разному называются...? singleton, init или run
 
 
3

Алексей

  • группа: Гости
{include file='test2.html'}

Я бы написал

{include 'test2.html'} - как и в PHP...Поддерживаются только одинарные кавычки или двойные и `

Сейчас код просматриваю, классно придумаю с расширяемостью
 
 
4

Антон

  • группа: Гости
Саня, можно кавычки писать любые.

Спасибо за то. что уделил время просмотру кода. Ты прав, где-то я пишу run(), где-то singleton(). Но суть одна и та же.

Насчет синтакисса - ты прав, но есть нечто такое, которое я назвал стандартом. И посчитал правильным. Но как я вижу сейчас в Питоне, оказывается я был близок к их подходу. Мы можем передавать именованные переменные (как это я уже сделал), так и неименованные в нужном порядке (как предлагаешь ты).

Т.е. можно написать так:
{include 'test2.html'}
и в обработчик include передастся массив переменных array(0=>'test2.html')

Хорошо, твой подход имеет право на воплощение. Давай перепишем главное правило парсинга шаблона.

Еще хочу заметить что фильтры сейчас не поддерживаются. Т.е. нужно добавить парсинг еще вот таких конструкций
{$var|crop len=10 end='...'|escape}

Это делается путем разбиения одного правила в пределах {...} на ряд последовательности правил, отделяемых друг от друга вертикальной чертой "|".

Как мне видится, это будет как раз то, чего хотят люди от хорошего шаблонизатора.

P.S. В ближайшие пару недель я буду занят другими задачами, поэтому предлагаю тебе взяться за доработку этого шаблонизатора. Будут вопросы - спрашивай, я всегда отвечаю. Спасибо за твой труд!
 
 
5

Антон

  • группа: Гости
Да, и еще. Сейчас есть исключение из правил для {...}. Если чтоит первый символ знак доллара, то подставляется вызов функции var value=$var. Как я заметил сейчас, можно так же применять это правило в тех случаях, если первый символ после "{" является $ или кавычка (строка в кавычках).

Этим самым мы сможем писать вот так:
{'This test show for you'|crop 10|escape}
 
 
6

Алексей

  • группа: Гости
{$var|crop len=10 end='...'|escape}
Не красиво)
----
Можно пробовать взять за основу альтернативный синтаксис PHP, но без
<?php ... ?> "PHP-кавычек"

<?php if(true): ?>
...
<? endif; ?>

В шаблонизаторе сделать

if(true):
...
endif;
---
Во фреймворке сделан роутер? Разбирает урл и вызывает нужный контролеер, дествие, может модуль(несколько контроллеров для одной цели... форум к примеру)
---
Ну и то, что singleton'ы по разному называется это большой минус, приходится помнить у какого класса какой. Я сам привык к имени getInstance
---
Насчет кавычек...пол года назад решил для себя использовать только одинарные кавычки в PHP. Немного ухудшается читабельность,но скорость возрастает. Фреймворк не для чтения, а скорость важна...думаю стоит задуматся...пусть это копейки...но нужно выжимать максимум...
---
Сейчас фреймворк похож больше на набор библиотек...можно сделать такую мега-вкусняшку...сделать инсталятор на PHP или в виде отдельной программы...запускаешь его, выбираешь нужные библиотеки(шаблонизаторы к примеру), там настраиваешь конфиги, добавляешь контроллеры и действия(actions)...указываешь папку куда сложить эту вкусняшку и 20-30% сайта уже готово...
 
 
7

Антон

  • группа: Гости
Синтаксис выработан не одним годом практики. и путем экспериментов и изучения шаблонизаторов на многих языках. Были столкновения к трудностями, которые привели к тому решению, которое показал я выше.

Роутер, как я уже говорил - есть, о он встроен сейчас в фреймворк и автоматически загружает нужный контроллер и вызывает action запрошенный в УРЛе. Следует разработать отдельный компонент для этих целей, который будет работать на базе конфигурационного файла.

Можно стандартизировать имена методов. Но getInstange пахнет МелкоМягким синтаксисом, который я не люблю.

Кавычки двойные - мы делаем читаемый код, а не плодим непонятно что, которое потом никто не поймет. Мы не теряем на этом существенной производительности, особенно если понимать что сценарии парсятся и кешируются. Я решил для себя что читаешость - выше скорости. То же решили сделать ребята из RubyOnRails - и они не ошиблись.

Уже ведется разработка генератора кода. Но сейчас уже Вы можете им воспользоваться и описать свои предложения по его доработке.

Успешного изучения!
 
 
8

Алексей

  • группа: Гости
Не ну с двойными кавычками я не согласен...для меня фреймворк нечто вроде черного ящика, у него есть вход и выход и ты знаешь как ими пользоваться, т.е. ты доверяешь разработчику. Если ты лезешь внутрь, скорей всего чтем-то не доволен, если что-то меняешь ... доменяешься до того, что это станет твой фреймвор. Вывод: писать так чтобы не хотелось лезть внутрь, нечего менять(не совершенствовать, не ускорять)
 
 
9

Алексей

  • группа: Гости
И чем тебе не нравится getInstanсe?) Многие ООП программеры используют singleton, но из них меньшинство знают, что это называется singleton

Так более менее-понятней, вернуть экземпляр...

http://http://www.phpro.org/ Автор использует getInstanсe кстати...и глянь он разрабатывает фреймворк...я бы назвал что-то среднее между фреймворком и CMS
 
 
Регистрация

Популярные статьи

» Mozilla Firefox: помощь и взаимоподдержка. Спрашиваем, ...
» Вопросы от новичков...
» перешли ли вы 100% на линукс без установленной параллел ...
» Ваши любимые плагины и дополнения
» Ответы на вопросы по PHP
» Какие CMS ВЫ предпочитаете - (плюсы и минусы)
» FAQ: вопросы и ответы
» Вопросы и консультации
» Другие браузеры (голосование!)
» Зарплата PHP программиста