![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
ksnk |
|
||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
для начала - зачем оно нужно?
Старый мой шаблонизатор перестал меня удовлетворять ![]() Смарти , как правило, раза в 2-4 превосходит по объему весь комплект скриптов, который мне, обычно, нужно ставить клиенту. Так что смарти отпадает и по причине своего большого объема. Возникли несколько задач, для которых генерация данных на клиенской машине JavaScript'ом более эффективна, чем отправка отрендеренных данных с сервера. Однако существующие шаблоны вывода данных не могут быть эффективно откомпилированы в javaScript и их приходится дублировать. Так что код шаблона, по возможности, не должен содержать в себе php функций По этому условию отпадают всякие нативные шаблонизаторы, в которых php вставлен во все места. Данными для шаблона должны быть "сырые", практически никак не обработанные данные. Разве что склейка разных данных в масив для передачи параметром в шаблонизатор и отрезание явно ненужных данных для пущей оптимизации. На этом этапе отваливаются все "шаблонизаторы без логики", в которых логику приходится вытаскивать на этап подготовки данных. Что хочется? Готовое решение было бы приятно, но, вероятно, недостижимо. :( Однако, хочется понять какой шаблонизатор даст наиболее компактную, и при этом наиболее понятную запись на своем языке шаблонов для задачи вывода таблицы "через-строчку", причем первая, четная, нечетная и последняя строчки выводятся РАЗНЫМИ html тегами. Разными в том смысле, что обычными плясками с классами-атрибутами не обойтись. Подключать javascript для форматирования - неспортивно. На этой задаче, imho, проиграют всякие атрибутивные шаблонизаторы, типа PHPTAL'а, по сравнению с тем-же Смарти. Так что логика Смарти, imho, предпочтительнее. -- Хочется продумать систему тегов шаблонизатора. Сейчас, вот, постепенно получается что-то такое
Хочется понять, этого достаточно для нормальной жизни или я что-то упустил и обязательно понадобится что-то еще? кстати, на этом языке задача решается примерно так
Это сообщение отредактировал(а) ksnk - 6.10.2010, 11:53 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
||||
|
|||||
Muerto |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: 3 Всего: 4 |
У меня конечно сервер vmware со смарти есть, но увы рыться в нем нет сейчас не желания не время...
У меня есть шаблонизатор, но в Php. Я на самом деле не понимаю зачем ещё один уровень абстракции над кодом чтоли... Вот к примеру смарти берет, перегоняет шаблон в Php и дальше с php работает... А у вас больше ресурсов жрать будет если в Php не перегонять ![]() Я шаблонизаторов такого рода
Стало любопытно как оно делается... сразу пришла в голову eval...
Дальше не стал в пустую конечно время тратить и придумывать велосипед, но вот к примеру а как с if быть? Это сообщение отредактировал(а) Muerto - 6.10.2010, 19:22 |
||||
|
|||||
ksnk |
|
||||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Muerto, Этот шаблонизатор будет порождать php код, примерно как и смарти, но без излишних телодвижений и дополнительных тегов, так что скоростные характеристики будут на нормальном уровне. Сейчас пока больше интересует определение языка описания шаблона. Хочется не потерять при этом возможность транслировать шаблон в другие языки, javascript, например.
Ну а конструкция
будет преобразована в файл tpl_main.php с таким содержимым
собственно рендеринг данных по шаблону будет делаться примерно так
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
||||||
|
|||||||
SneG0K |
|
|||
![]() Max Mara ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1887 Регистрация: 1.12.2007 Где: Wis Dells Репутация: 7 Всего: 54 |
ksnk, то есть если я правильно понял, ты хочешь написать новый язык шаблонизаторов, а интерпретатор будет кросс-платформенным (в данном случае в роли платформ будет выступать PHP, JS)?
|
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
SneG0K, сам шаблонизатор будет написан на php. В нормальном режиме сам шаблонизатор просто подгрузит недостающие классы и вызовет нужный метод нужного класса. Однако, при необходимости (время создания шаблонов поменялось) он перетранслирует изменившиеся файлы. Некоторые шаблоны (видимо их будет удобнее задавать просто списком) будут также оттранслированы в отдельный javascript файл, для использование на клиентской стороне.
Да, в принципе, получается новый язык. Хотя такой способ записи операторов встречается во многих местах. просто хочется зафиксировать минимальный набор конструкций и переписать имеющиеся шаблоны на новый язык. Oбидно будет, если где-то на половине работы выяснится какая-то идеологическая дыра ;) -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
cutwater |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 592 Регистрация: 24.6.2008 Репутация: 1 Всего: 10 |
ksnk, если говорить о синтаксисе языка шаблонизатора, обратите внимание на такие решения как Jinja2 (python-шаблонизатор) или ERB (шаблонизатор Ruby On Rails).
Добавлено @ 21:42
Пример того как это реализовано в той же Jinja2 http://jinja.pocoo.org/2/documentation/templates#for Хочу сказать что обилие шаблонизаторов не ограничевается одним лишь Smarty, для php видел с подобным сиснтаксисом, наследованием шаблонов. Но насколько они допилены до вменяемого состояния судить не берусь. Вообще нахожу Jinja2 весьма интересным и удобным инструментом. Было бы неплохо, чтобы и в php реализовали что-то подобное. eval это же моветон и не спортивно совсем. Точней в итоге конечно все сводится к выполнению шаблона, но все равно одной простой замены недостаточно. Таки шаблон необходимо парсить. Это сообщение отредактировал(а) cutwater - 6.10.2010, 21:44 |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Да, как пример синтаксических конструкций - очень полезно. Некоторые вещи надо срисовать. Однако, на мой взгляд, там много и ненужных мне вещей. Я примерно ориентируюсь на перспективу переписывания уже существующих моих шаблонов и примерно представляю что получится. Правда тут следует сделать оговорку, что в моем случае использовалось что-то, что начиналось как "шаблоны без логики", затем он начал обрастать логикой, но изначально заложенные ограничения сильно мешали жить. Так что мне, возможно, только кажется, что хватит небольшой функциональности шаблонизатора ![]() Добавлено через 4 минуты и 42 секунды шаблонизатор для ruby, к сожалению, сильно далек синтаксисом от моего и заточен для Руби. Так что, видимо, пока отложу... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
ksnk, twig пробовал?
|
|||
|
||||
enoff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 30.6.2010 Где: Санкт-Петербург Репутация: 11 Всего: 13 |
постоянно не хватает {for}<li>...</li>{else}нет ничего.{/for}
|
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Посмотрел. Это Django-template порт на PHP. Пока отпугивает размер в 400к самого дистрибутива и 300к после выкидывания примеров... Размером Смарти подобен ![]() Накопал еще один порт этого движка - h2o. Пока ковыряю его. Из минусов - обнаружил, что он хранит откомпилированные шаблоны в сериализованных данных в файле. Если удасться уговорить его сохранять результат в PHP, то просто очень приличное решение получится. На первый взгляд - довольно удобный, компактный шаблонизатор с очень приличными возможностями. Размером в +50к скриптов в боевой поставке - немного, вообще говоря. Хотя никто из них не хочет транслироваться куда-то еще, так что придется писать и самому ![]() -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
NewDima |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: 10 Всего: 12 |
ksnk, ну как там с уговорами? Интересно же, к чему приводят ковыряния.
|
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
NewDima, пока остается желание писать свое - пишу свое
![]() h2o пока отложен, так как простого и понятного средства получить "исполняемый" скрипт не придумалось. Ксати, "кроссплатформенность" предполагается получать с помощью трансляции шаблона по шаблонам, которые создаются самим шаблонизатором Что-то вроде раскрутки юникса от С. ![]() В общем - в выходные должен получится хоть как-то работающий прототип. Дальше буду смотреть уже на него, уродец получился или пусть поживет . -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
ksnk |
|
||||||||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Продолжу описание концепта...
-- за основу синтаксиса взят синтаксис Jinja2. По ссылкам выше можно найти документацию по нему. Сейчас реализованы некоторые базовые теги, механизм отработки фильтров, тестов. Необходимость реализации макросов пока представляется сомнительной. шаблонизатор логически разбивается на 2 слабосвязанные части -- система рендеринга - рендеринг данных по готовым "шаблонам". Состоит из базового класса шаблонов с описанием некоторых нестандартных фильтров и тестов.
оттранслированные шаблоны
код не форматирован и пока не оптимизирован. Функция рендеринга, которая вызывает нужный метод
Функция просто вызывает нужный метод из нужных шаблонов, подставляя туда данные. -- компилятор шаблонов - компилятор с Jinja2 в удобную для шаблонизатора систему скриптов на php. по такому шаблону получен код, приведенный выше
-- "удобная для шаблонизатора система скриптов" задается комплектом скриптов на Jinja2, которая транслируется компилятором шаблонов. Получаемые скрипты рендеринга (внутренний рендеринг) используются для компиляции "боевых" шаблонов. Вот такой Jinja2 скрипт сейчас используется для получения "внутренних" шаблонов.
Сейчас нужно вытащить все завязки на генерацию PHP конструкций из компилятора в этот скрипт и появится возможность написать "внутренний" шаблон для javaScript'а Это сообщение отредактировал(а) ksnk - 15.10.2010, 10:00 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
||||||||||
|
|||||||||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Вот, что-то получилось. Пока - в стадии "deep beta", однако кое-что уже работает и мне, в принципе, для замены моего шаблонизатора, уже хватает. Исходников написалось аж на 50к, если определить все недостающие теги и нужные фильтры-функции, вполне способен дорасти до 100. Компилирует достаточно шустро, хотя использовать его для online трансляции я бы не стал.
В Javascript пока не транслирует, пока нужно определится с php-трансляцией и понять как можно тестировать javascript код с помощью simpletest... В архиве - комплект файлов. в каталоге sample - простой пример использования и пара шаблонов. А вообще - хотелось бы узнать - компилирующий шаблонизатор с Jinja2 синтаксисом еще кому-нибудь нужен? ![]() Если нужен, то как его назвать? Пока рабочее название Jinja4php. Довольно корявое, imho... Какие функции в шаблонизаторе необходимы в первую очередь? Это сообщение отредактировал(а) ksnk - 24.10.2010, 01:27 Присоединённый файл ( Кол-во скачиваний: 5 ) ![]() -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
NLspieler |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 619 Регистрация: 13.10.2008 Где: Берлин Репутация: 16 Всего: 19 |
Если нужен шаблонизатор, напиши себе свой шаблонизатор.
Мне вот нужен был, я взял и написал. Теперь с удовольсьвием его использую. Шаблонизатор получился не большим, всего 12 килобайт (с русскими комментариями). Я его как раз заточил под такие случии:
В шаблонах даже комментарии можно писать. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |