готов парсер для Template, что дальше?

ustas

Элекомист №1
dark-demon
и я о том же. думаю нефиг в шаблонах более сложные варианты делать.

Почитал я про wraper'ы, и не хера не понял. Зачем они в шаблонах? и в wact'е смотрел, Подскажите.

new http://at.tut.by/stepanovsergey/Lapa.zip стандартные шаблоны smarty оттестировал, работают, вместо имени переменной в теги можно и нужно указывать саму переменную. foreach from=$var item=$it. Конфиги не работают, это плагин нужно портировать. не реализованы is even и т. п.

-~{}~ 20.09.07 22:51:

обновление http://at.tut.by/stepanovsergey/Lapa.zip 42 кб
добавлена:
поддержка #config_val#, плагин еще не портирован
локальные переменные $$var
поддержка доступа к массиву $var.1.$i.4.h - $var[1][$i][4]['h']
доступ к объекту $var.е->r(5+5 / 4* $v++)->t.w - $var['e']->r(5+5 / 4* $v++)->t['w']
section уехал в плагины (для совместимости), loop более быстрый и удобней
глобальные переменные lapa & smarty
переписан парсер выражений
комментарии в стиле php // блокирует до конца строки /* - до конца блока, */ завершает
{set $var = 1 + /* добавляем значение*/ 5}
{set $var = 1 + 5/*
комменты }
конструкции типа is even будут реализованы таким образом {[! - not] even($var [, $var2]) }, проверку синтаксиса (уровень вложенности и т.п.) конструкций такого типа сделать довольно сложно (smarty их не контролирует.), если мысли есть, пишем.

-~{}~ 21.09.07 16:33:

http://at.tut.by/stepanovsergey/Lapa.zip 43 кб исправлена ошибка с с загрузкой модуля

-~{}~ 21.09.07 16:34:

!

-~{}~ 23.09.07 03:39:

http://at.tut.by/stepanovsergey/Lapa.zip v 0.5 (44 кб)
первая рабочая бета

-~{}~ 24.09.07 10:55:

http://at.tut.by/stepanovsergey/Lapa.zip v 0.5.1 (44 кб)

-~{}~ 24.09.07 11:01:

http://at.tut.by/stepanovsergey/Lapa.tar v 0.5.1 (235 кб)

-~{}~ 29.09.07 04:02:

http://at.tut.by/stepanovsergey/Lapa.zip v 0.5.2 (59 кб)
рабочая тестовая версия

-~{}~ 29.09.07 18:22:

http://at.tut.by/stepanovsergey/Lapa.zip v 0.5.2 (59 кб) от 29.09
Кеш можно удалять по ключу.

Например кешируется страница для пользователей группы 123
if (!$View->isCached('file:theme01/index.tpl.php', array(123, 'ru'))) {

}
$View->display('file:theme01/index.tpl.php', array(123, 'ru'));

$View->clearCache(null, array(123));

удалит кеш связанный с данной группой
 

Major

Новичок
Я честно не понимаю зачем писать пхп на пхп. Пхп уже сам является шаблонизатором. Шаблонизатор пишут вроде как чтобы облегчить работу верстальщику и реализовать паттерн MVC. Но нафига изобретать интерпретатор на осонове интерпретатора? Кстати шаблонизатор понимает шаблоны из строк? Например я храню шаблоны в базе, что тогда? Как он обрабатыает логику и выполняет ее?

Я вам приведу пример самого простого шаблонизатора на пхп, который я придумал, и он самый быстрый, ибо он паристся самим пхп. Шаблон можно загружать откуда угодно, хоть из базы, хоть из файла. Ничего не меняется от этого.

Код:
<html>
<head>
<title>${'Тайтл'}</title>
</head>
<!-- TPL SET SECTION:
${COMMENT
// Этот
// комментарий
// не отобразится
}

{$SET[ ${'Перменная нах!'} = 'TEST!' ]}
{$SET[ ${'Перменная нах!'} = strtolower(${'Перменная нах!'}) ]}
{$SET[ ${'Вторая перменная'} = 'ыыыыы!!!' ]}
{$SET
//Переменная 1
      { $var1 = 1 }
/**
 * Массив, емае!
 */
      { $var2 = array(1,2,3) }
      { $var3 = 'Test' }
      { $var4 = foo(4) }
}

${COMMENT /* Комментарий, который не отобразится*/}
-->
<body>
<pre> $var1 {$var2[1]} $var3 $var4 </pre>

<p>Этообъект {$obj->object}</p>


<div> Обрабатываем перменную и вставляем ее
{$RETURN( str_replace('t', 'h', ${'Перменная нах!'})  /*Обработает перменную и вставит ее сюда*/ )}
</div>

<p> Условие, варинт 1, упрощенный. Возвращает значение перменной
$ {'Перменная нах!'} или $ {'Вторая перменная'}

${ $var ? 'Перменная нах!' : 'Вторая перменная' /*По моему прикольно!*/ }
</p>

<p> Условие 2. Поддерживает блоки.

{$IF( ${'Вторая перменная'} == 'никуясебе'  OR $var1,
         ${'Вторая перменная'} ,
         "Круто нах!"
//А это условие, которое позволяет оперировать целыми блоками.
)}

</p>

<p> Можно даже такой вариант написать, но я отказался от него.
Минусов больше чем плюсов.

${ $IF( !empty($var3) ) ? $THEN(

	"Это блок 1"

):$ELSE(

	"Этоблок 2"

)}
</p>


<div> Итератор (1 из доступных, описан в библиотеке).
Берет данные из массива ${'Новости'}.
Поддерживает неограниченную вложенность, условия внутри итератора и прочее...

{$FOREACH( ${'Новости'},
  '<p>$i ${"Заголовок"}<br/><br/> ${"Текст"}</p>'
/*
 Ну обычный итератор, пример без наворотов,
 хотя он способен вытворять такое, что ни 1 шаблонизатоу
 и не снилось
*/
)}

</div>

</body></html>
(c)2007 -={ Non Trivial PHP }=-

Это обычные конструкции пхп в нетривиальном синтаксисе. Чем этот синтаксис хуже? Никаких мега парсеров, никаких регулярных выражений. Шабон можнохранить в базе. Выполнить шаблон можно даже без использования функции eval (можно, можно)! Скорость = скорости работы пхп. Весь шаблонизатор - это свод правил и соглашений, на основе которых строится "песвдосинтаксис макроязыка". Программист инициализирует нужные перменные в коде, которые можетюзать верстальщик. В самой библиотеке шаблонизатора описаны готовые функции, которые и создают основу "макроязыка", такие как $ITERATOR(), $RETURN() и прочие функции. Я пользуюсь такой штукой в своих проектах. Народ, в лице верстальщиков, не жаловался (пусть посмеют =)), тем блее мануал по синтаксису занимает пару страниц, там осваивать-то нечего. Программисту тем более. Шаблонизатор поддерживает неограниченные уровни вложенности. Еще бы, ведьэто же обычный пехепе код. Так же шаблонизатор не перегружен самописной рекурсией и реуглярными выражениями, что и говорит о том, что скорость работы его высока!

Вообще, если верстальщик не способен разбираться в языках программирования, ему достаточно только показать стандартные вставки, которые он может всталвять( перменные и готовые функции типа $Var и {$Foo($argv)}). Если он уже знает как написать foreach, то тогда либо сразу пхп пусть пишет, либо XSLT имхо.

З.Ы.: Эх, любит народ велосипеды делать и колеса изобретать. Только порой всякие фреймворки типа simfony и шаблонизаторы типа smarty не что иное как посредники-рекитиры. Делают то, что можно сделать без них, тратят напрасно ресурсы как системы, так и человеческие(изучение документации по синтаксису и вникание во все токности наворотов). Во 2х, как показывает практика, нынемуществующие шаблонизаторы не способны реализовать весь функционал, который доступен в пхп. Люди порой забывают, для чего пишутся шаблонизаторы. Изобретение бейсика плохое занятие. Бейсиков полным полно. Реализовать паттерн MVC - вот главная задача, отделить логику внешнего вида от контроллера и связать данными! И решить эту задачу можно без надстроек над языком. Почему все писатели шаблонизаторов ставят приоритетом задачу: сделатьудобный синтаксис ? Разве это смысл паттерна? Практика показывает что скорость важнее любого красивого синтаксиса!!! Хотя сам проходил через это, если честно. Сам писал свою версию "смарти", и сам теперь считаю ее самым отстойным кодом в своей жизни. Все через это проходят.

З.Ы.: В принципе, если очень уж заморочиться, то на данный шаблонизатор можнонаписать оболочку-надстройку. Тоесть реализовать как раз верстальщико понятный синтаксис, чтобы он бедненький не мучался и не писал {$SET[ ${'Перменная нах!'} = 'TEST!' ]}, а писал что-то типа
<%set ${'Перменная нах!'} = 'TEST!'> и уже при сохранении этоткод переводился в нужный синтаксис, а при редактировании скрипт преобразовывал в нужный вариант опять же. Но я считаю это мартышечьий труд. Есть задачи поважнее, чем "жалеть" верстальщиков.
 

ustas

Элекомист №1
Major
без комментариев

-~{}~ 30.09.07 18:40:

текущие релизы можно скачать с форума dklab.ru

-~{}~ 30.09.07 18:42:

Major
бред
 

cDLEON

Онанист РНРСlub
ustas
Почему бред? Обоснуй.
Имхо - Так оно и есть. А смарти велосипед. Который ещё и компилируется....ыыыыыы. Ржу-нимагу =)
 

С.

Продвинутый новичок
Сказано:
Да не напиши в темплейте HTML в кавычках,
Ибо если напишешь, то не темплейт это вовсе,
А так, срам Господень. И отвергнут его потомки,
И будет он посмешищем,
И будет ему Содом в Гоморру.
 

Major

Новичок
ustas

Мой бред как 1 из вариантов. Я просто решил отказаться от <?=$var?> и сделать чуточку запись короче. А вообще нигде не написано, что шаблонизатор в 1ю очередь должен предоставить "безграмотному" верстальщику интуитивно-понтяный язык, чтобы он случайно не перетрудился.

Не понимаю смысла вэтом. Все верстальщики такой тупой народ чтоли? Что вы унижаете их достоинство и самолюбие своими репликами: "...для любого верстальщика, неразбирающегося в программировании...".

"Дизайнерам-верстальщикам нужна..., но они не хотят иметь дела со сложностями языка программирования" - это из официальной документации по Smarty. Так все дело в лени?

Это слышно сплошь и рядом. Позор таким верстальщикам, позор и в шею их с работы!

А паттерн MVC реализовывается с помощью пхп без дополнительного гимора. Во 2х верстальщику ненужноизлишеств, это так, и в шаблонах ничего не должно быть лишнего. Кроме возможности вставить перменную( что я продемонстрировал в шаблонизаторе ) и возможности вызватькаку-то функцию-компонент. Все!

Какие объявления переменных типа SET тра -ла -ла ? Это верстальщик не хочет связываться с программированием? Условия нужны? Есть они в пхп, и в моем варианте тоже. Нужны списки? Есть они в пхп и в моем варианте тоже. Бред в чем? В том что я не изобрел очередной язык? Зато мой шаблонизатор по праву считается самымбыстрым! Быстрее самого пхп написанное на пхп не может существовать!

З.Ы.: В погоне за идеалом, не забывайте об истинных целях, ато забудете зачем на земле существует разделение полов!

З.Ы.: Прежде чем давать ответ из 1го слова, лучше досчитай до 10, а потом пожуй чего-нить, авось руки в это время заняты будут, чтобы ненароком на клаву не упали.

-~{}~ 30.09.07 22:23:

ustas
Ты кстати не ответил, твои шаблоны возможно хранить в базе? Я могу их загружать прямо из базы, или только из файла?

-~{}~ 30.09.07 22:37:

С.

Сказано в ответ:

Да не прелюбодействуй с изобретениями, ибо если задачу решеить нельзя будет из за ограничений шаблонизатора( без выежеств через костыли ), то хуже срама нет насвете!
Да не трать ресусры понапрасну, ибо это есть самый страшный грех!
 

HraKK

Мудак
Команда форума
Major
Не надо хранить шаблоны в базе.

из за ограничений шаблонизатора
Смарти поддерживает PHP Native. Дальше что?

-~{}~ 30.09.07 22:31:

Major
Опять таки не забывай что Smarty это тот же PHP Native в итоге после компеляции.

Что дальше?
 

Major

Новичок
HraKK

Дальше каждый остается при своем мнении. Нравится вам чувствовать себя Кулибиными - ваше право. Нобелевская премия вам всеравно не светит за это. Перебеситесь, придет опыт и поймете, что тратили время понапрасну. У меня не было задачи "обосрать" ваше творчество. Я всего лишь привел вариант. А выбор пути каждый делает сам. Я сделал свой выбор. И практика показывает что он самый верный. Круче, быстрее и функциональнее чем сам PHP и XSLT вы всеравно не напишете, тем более на том же PHP.

З.Ы.: Смешно звучит термин компиляция, применительно к шаблонизаторам. Осталось изобрести интепретаор промежуточного байт-кода пхп на пхп, для полного счастья. Кстати интересная тема, кто-нить хочет развить?

Прощайте!
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Major
В вашем шаблонизаторе предусмотрено кешированние?
Сомневаюсь.
 

Major

Новичок
Mr_Max

А кто сказал что кеширование входит в паттерн MVC? У меня кеширование вынесено в отдельную библиотеку, а вообще я предпочитаю делать кеширование на уровне ядра системы, так как это добавляет гибкости в управлении и позволяет обеспечить лучшее взаимодействие.

Вот кто сказал, что проигрыватель МП3 должен быть встроен в блокнот? Вот я редактирую тексты и хочу музыку послушать, я должен его встроитьв блокнот обязательно? Где это предусмотрено, каким паттерном?

Кеширование в моих системах есть, но не в шаблонизаторе.
Чего мелочиться, вы уж сразу в шаблонизатор встройте функции для работы с БД, да еще абстрактные, чтобы прямо сразу писать

<sql:select * from table>

Ато как-то уж вяло у вас с функционалом. Не доработали, господа, не доработали. Вы писали выше чтобы вам советовали чего не хватает в вашем шаблонизаторе такого, отчего все бы писались кипятком. Вот вам мой заказ: хочу функции для работы с БД прямо из шаблона, да не просто с мускулом, а абстрактные! Хочу работать с Postgres, MySQl, SQLite...

А еще знаете, что? Хочу поддержку ORM! Вот давайте сделаем так, чтобы вот я пишу

<orm name="Table" field="field1">Данные</orm>

и шаблонизатор сам определил есть ли поле в таблице и создаст его, если нет, и занесет значние, а если я напишу

<orm name="Table" field="field1"/>

то извлечет значения из базы и впишет их. Я буду писать кипятком от таких наворотов в шаблонизаторе!

О! А давайте напишем целый фреймворк на псевдоязыке!!! Долой пхп, даешь шаблонизатор!!!

А еще мелочь, можно? Игру крестики-нолики. Ну чтобы мои верстальщики могли развлечься, ато и так их заствляют верстать шаблоны незнамо на чем. Помрут ведь, бедные. Встройте как пасхальное яйцо в ваш шаблонизатор.

Заранее признатален!
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
1. многабукаф низнакомых. ниасилил.

2. Ваша ирония мне непонятна. Я задал простой вопрос. И ожидал услышать простой ответ. Поскольку считаю, что один из главных плюсов того-же Смарти - это кешированние, которое можно реализовать очень быстро и без лишних телодвижений.

Спорить "кто выше писает" у меня нет желания.

-~{}~ 30.09.07 23:39:

Дальше каждый остается при своем мнении
 

Major

Новичок
Mr_Max

Хорошо, даю простой ответ. Да, кеширование существует (ведь я могу совместить 2 свои библиотеки в 1).
 

ustas

Элекомист №1
Major
Если бы ты посмотрел, то увидел метод parseString($template_name, $template_string)
Почему бред? {$IF( ${'Вторая перменная'} == 'никуясебе' OR $var1,
${'Вторая перменная'} ,
"Круто нах!"
//А это условие, которое позволяет оперировать целыми блоками.
)}
я не понимаю как это обрабатывается, и не понимаю синтаксис, тот же HraKK и активное сообщество наставили на путь - не отходить от синтаксиса Smarty. Да! Я признал синтаксис smarty за стандарт, хотя сейчас могу переделать синтаксис даже похожим на с, джаву и чего угодно, это не сложно.

сейчас можно писать в шаблоне <div> $variable.one;</div>, видимость переменных разная, без копирования значений. В отдельной ветке есть возможность создавать макросы, создавать разные языковые версии шаблона из 1 шаблона, можно выводить деревья 2 строками, без вызова include.

Вот вам мой заказ: хочу функции для работы с БД прямо из шаблона - только для тебя
{sql select='select * ***' var=$var}
$var.id; $var.title;
{/sql}
пользуйся, работает с любой базой
 

Major

Новичок
ustas

Вот, другое дело. Люблю когда люди отзывчивые и склонны к общению.

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

Дизайнер, знающий SQL, но неспособный вставить php код это нонсенс. Вы ребят определитесь. Во 2х, каким образом союблюдается паттерн MVC ? Если изменили названия полей в таблице или изменили структуру базы, то, выходит, в шаблоне надо переписывать ваши

{sql select='select * ***' var=$var}
$var.id; $var.title;
{/sql}

если не дай бог какой-то горе-умник такое додумается вставить в шаблон?

Еще раз убедился, что все это не ради отделения представления от контроллера, а ради изобрести что-то свое. Сама идеология паттерна MVC непозволит вам вставить SQL код в шаблон. В шаблоне должны быть только независимые кнструкции. Вы своими навортами делаете пустую работу. Возьмите решето и лейтеводу через него, эффек тбудет аналогичным. Забивайте шурупы молотком, выкручивайте саморезы гвоздодером. Учитесь на инженера, а работайте продавцом в магазине. Пейте молоко с селедкой и жалуйтесь на магнитные бури!

Ну успехов вам, вдруг и правда внесете вклад вразвитие пхп. А может сотворите очередной язык типа пхп. Мало нам всяких Рубей да Питонов. Плохие они. Скоро дойдет до того, что каждый программист станет писать для себя свой язык и использовать только его.

Да! Я признал синтаксис smarty за стандарт, хотя сейчас могу переделать синтаксис даже похожим на с, джаву и чего угодно, это не сложно.
Зачем? Чем синтаксис PHP плох?

я не понимаю как это обрабатывается, и не понимаю синтаксис
Это синтаксис пхп, он работает как должен работать пхп. Прототип функции и пример ее выполнения:
PHP:
<?php
$IF = 'if_function';

function if_function( $argv1, $argv2='', $argv3='')
{
  return $ragv1 ? $argv2 : $argv3;
}


echo "Text {$IF( $argv1, $argv2, $argv3)} text!";

?>
Вы не можете считаться профессиональным программистом на пхп, если не способын прочесть нестандартные конструкции, это значит вы не знаете все возможности языка! Настало время когда дилетанты пишут стандарты, боже мой. Апокалписис не за горами!
 

Major

Новичок
triumvirat

Шутка, не шутка, а работает, и очень быстро! Минимум затрат на разработку. Выгодно, быстро, удобно.
 

Major

Новичок
triumvirat

А я и не отказыаюсь оттакой схемы. Да, я тоже использую такие конструкции иногда. Просто я сказал, что вообще в шаблоне как правило должно быть по минимуму. И чтобы как бы упростить обращение к перменным и функциям, я упростил <?=...?> чтобы было удобнее.

Мне это удобнее. Я же как раз наоборот за то, чтобы в качестве шаблонизатора использовать чистый пхп. Можно обычный синтаксис пхп, можно нетривиальный, дело выбора. Я и тот и тот признаю. Я пытался понять в чем мегаплюсы шаблонизаторов типа смарти и того, который тут описан. Я вот что хотел понять.

Может я чего-то не допонимал и мне бы объяснили. Реально аргументов кроме: красивый синтаксис я не увидел. Я и пытался узнать у поклонников самописных макроязыков чем хорош красивый электрический шуруповерт, перед обычной отверткой, когда не всеравно чем закручивать шурупы, лишь бы конструкция была надежной ? Я просто тоже человек и могу что-то не понимать. Я хотел понять каким образом красивый синтаксис и обилие навороченных конструкций, которые даже позволяют из шаблона к базе обращаться реализуют идеологию паттерна MVC ? На первом месте представления от данных и контроллера, на 2мскорость работы. Шаблон верстается 1 раз, а сайт работает непрерывно. Мне было интересно мнение профессионалов(если таковые есть) насчет того, чтоже реально такгоесть во всех этих надстройках-рекетирах, ради чего я бы готов был согласиться и сказать: "да, это и правда крутои это стоит того"!
 

ustas

Элекомист №1
${ $IF( !empty($var3) ) ? $THEN(

"Это блок 1"

):$ELSE(

"Этоблок 2"

)}
мне трудно понять этот код, точно лучше использовать обычные конструкции.
Если хочешь обсудить это, заведи новую тему, и удали свои верёвки псевдо кода
 

Major

Новичок
ustas

нИвапрос!

Я получил все что хотел. Аргмунетов у вас было мало, по существу почти ничего не смогли сказать! Доказать свою правоту не смогли. Вы сами верите в то, что делаете? Надеюсь что да, иначе грустная картина вырисовывается. Я лишний раз убедился что я сделал правильный выбор в сторону чистого PHP и XSLT.

Надеюсь никто не в обиде, так как это было всего лишь обсуждение в поисках истины. Вроде все цивильно получилось, хотя судя по тону некоторых, они были на пределе чтобы сорваться.

С уважением, Major.
 
Сверху