Forum Webscript.Ru

Программирование => PHP => Тема начата: Гаррилл от 04 Мая 2003, 20:08:18

Название: Зацените принципы ещё одного class Template
Отправлено: Гаррилл от 04 Мая 2003, 20:08:18
Вот и я сделал template engine. Начинал не с нуля, а с исходников от phpbb.
Переделал компилировщик (теперь он генерит нормальный php), добавил такую функциональность, как , .
С динамическими блоками и обычными вариаблами работает, как раньше с ИФами и инклудами так:



main_tpl.tpl





//всякий хипер текст маркап лэнгвич





include.tpl
//всякий хипер текст маркап лэнгвич


php.php
$template = new Template($default_skin_dir, $default_lang_dir);

$template->set_filenames(array(\'MAIN_TPL\' => \'main_tpl\'));

if(авторизован, как админ)
{
$template->assign_vars(array(\'IS_ADMIN\' => TRUE);

$template->set_filenames(array(\'SOME_ADMIN_BOX_HANDLE\' => \'blocks/include\'));

$template->assign_include(\'SOME_ADMIN_BOX\', \'SOME_ADMIN_BOX_HANDLE\', 1);
}
else if(другие условия)
{
$template->assign_block_vars(\'block1\', array(\'VALUE\' => \'какой-нибудь валуй\'));
}

$template->pparse(\'MAIN_TPL\');
?>




Т.е. в ИФах можно использовать пхп-код и значения {var:IS_ADMIN} или в блоках {var:block1.VALUE} для различных
condititons. Они задаются тем же assign_vars, но не добавляется
Теперь о технологии парсинга. Тот же eval или require_once при кэшировании.
При использовании инфа берётся из нескольких tpl, они все становятся одним uncompiled_code
с помощью str_replace-ов. Притом конфликтов с вложенностью нет, т.к.
assign_include(\'   [str:some variable in tpls]\', \'    [str:handle of file content]\', \'    [int: level of replacing]\');
Т.е. level того шаблона в котором меньше, чем у того, в котором контент для .
В общем создаётся шаблон, потом один раз прогоняется compile-ом и eval-ится.

С кэшированием такого нет. так и инклудит файлы. Т.к. у разных страниц сайта мошгут быть разные подключения. Зашивать железно или
перекэшировать каждый раз нехорошо. А с несколькими require_once нормально.
Ещё фича этих инклудов:

$template->assign_include(\'SOME_ADMIN_BOX\', \'SOME_ADMIN_BOX_HANDLE\', 1);
$template->assign_include(\'SOME_ADMIN_BOX\', \'SOME_ADMIN_BOX_HANDLE_2\', 1);

будет инклудить в один 2 файла. Мне, например, это удобно для создания side-boxов (меню, ниже опрос, ниже баннер).

На локалке работает гораздо быстрее, чем раньше.
Есть ли у вас пожелания/замечания/критика? Я нормальный :)) Орать, что обиделся не буду :))
Кстати, кодил это где-то неделю, а продумывал где-то ... две.

http://kirill-gar.fromru.com/template.zip
Название: Зацените принципы ещё одного class Template
Отправлено: Xander от 04 Мая 2003, 20:16:54
Гаррилл
а можешь вкратце сказать, чем от SSI отличается?
возможностью использовать PHP?
Название: Зацените принципы ещё одного class Template
Отправлено: Гаррилл от 04 Мая 2003, 20:25:17
Xander
Я, если честно (может быть, стыдно должно быть), не знаю, как работает SSI, я его только юзать умею.
А отличается, наверное, и присутствием только одного php.
Название: Зацените принципы ещё одного class Template
Отправлено: Tronyx от 04 Мая 2003, 20:44:13
Гаррилл ты не можешь свой класс в архиве на своём сайте выложить?
Название: Зацените принципы ещё одного class Template
Отправлено: Гаррилл от 04 Мая 2003, 21:00:13
Морочиться с ssh и cvs нет времени - там дира на sourceforge с ph* долго открывается (проектов на php много), а мне надо к экзамена выпускным/ЕГЭ/вступительным готовиться. Могу на мыло выслать.
Название: Зацените принципы ещё одного class Template
Отправлено: Tronyx от 04 Мая 2003, 21:30:15
Цитировать
Гаррилл:
а мне надо к экзамена выпускным/ЕГЭ/вступительным готовиться.

Да... Запихнуть пару килобайт кода в ZIP архив и закинуть по FTP к себе на сервер это серьёзная преграда подготовке к экзаменам. :D

Цитировать
Гаррилл:
Могу на мыло выслать.

Да это чтобы не захломлять топик длииными месагами со смайликами место скобок.
Название: Зацените принципы ещё одного class Template
Отправлено: Меняздесьдавнонет от 04 Мая 2003, 22:04:40
никогда не понимал, чем это


   

   
       
        //всякий хипер текст маркап лэнгвич
       
   


лучше этого


   

   
       
        //всякий хипер текст маркап лэнгвич
       
   

Название: Зацените принципы ещё одного class Template
Отправлено: Гаррилл от 04 Мая 2003, 22:33:01
Tronyx
Тут есть тектовая версия
http://kirill-gar.fromru.com/template.php (смотреть надо html-source)
Есть и
http://kirill-gar.fromru.com/template.zip
Цитировать
ZIP архив и закинуть по FTP к себе на сервер это серьёзная преграда

Там нет FTP.
RomikChef
Я тоже. Но это навязали временем. К этому, может быть, привыкли дизайнеры. И если уж на то пошло, то вообще можно без шаблонизаторов обходиться. Но как же быть при лёгкой смене дизайна, смене скинов страницы? Без шаблонов фигово. Да и, если так выразиться, не модно :)
Хотя мой вариант при кэшировании работает абсолютно также, как и echo в теле главного скрипта, т.к. генерится нормальный код, который быстро выводится.
Впрочем, рабочий сайт покажу, но ближе к июлю.
Название: Зацените принципы ещё одного class Template
Отправлено: Меняздесьдавнонет от 04 Мая 2003, 23:46:26
Цитировать
навязали временем

не понял
Цитировать
привыкли дизайнеры

повторяю. не вижу разницы. вряд ли ее и дизайнеры заметят.
Цитировать
Но как же быть при лёгкой смене дизай

меняется три файла: шапка, ноги и таблица стилей.
Цитировать
не модно

Не вопрос. ради моды некоторые даже на физические мучения идут. что уж тут говорить...
Название: Зацените принципы ещё одного class Template
Отправлено: Гаррилл от 05 Мая 2003, 00:15:57
Цитировать
RomikChef:
меняется три файла: шапка, ноги и таблица стилей.

Если абстрактно рассуждать, то всё просто. Но на деле, когда нужна и функциональность, и скорость, и удобство не всё так просто. А, например, мне шапки, тела, футера ох как мало. Мне нужна ещё визуальная генерация деревьев, и дин. блоки и возможность создавать колонки и ленты путём прописывания 6 строк.
Цитировать
повторяю. не вижу разницы. вряд ли ее и дизайнеры заметят.

Насчёт долларов/недолларов. А какая здесь уже разница? Всё равно всё вместе парсится один раз. Тем более, чтобы отпарсить $ и {} пишешь один и тот же код. Соглашусь, что это всё фигня. Но не фигня заключается в том, что ему легче писать
{gav_gav}
, чем
- (бред, а не пример :)) Но всякие мои дружки-дизайнеры не любят писать PHP, только html (я же не виноват).
О! Нашёл в чём шаблоны проще :))
легче для понимания, чем for($i=0; $i
Название: Зацените принципы ещё одного class Template
Отправлено: Меняздесьдавнонет от 05 Мая 2003, 10:34:49
Цитировать
мои дружки-дизайнеры не любят писать PHP

а на этом просто обожают.
С этого бы и начинал
Название: Зацените принципы ещё одного class Template
Отправлено: Макс от 05 Мая 2003, 11:50:05
имхо получился урезанный smarty (http://smarty.php.net)
Название: Зацените принципы ещё одного class Template
Отправлено: Tronyx от 05 Мая 2003, 17:11:32
Цитировать
RomikChef:
никогда не понимал, чем это
...
лучше этого

Конкретно в данном случае ничем. А вот при использовании более "крутых" шаблонных инструкций, вариант на PHP будет заметно длиннее и сложнее для дизайнера/кодера.
Цитировать
Гаррилл:
Но как же быть при лёгкой смене дизайна, смене скинов страницы?
Впринципе это без особых проблем можно сделать и на "php шаблонах".
Цитировать
RomikChef:
меняется три файла: шапка, ноги и таблица стилей.

ИМХО так неудобно. Когда дизайн в одном файле ты сразу видишь весь шаблон, а не только до контента или после.
Цитировать
Гаррилл:
ему легче писать
{gav_gav}
, чем

Невижу ни каких принципиальных различий, ну разве что во втором варианте на 4 символа больше :) Повторяю: разница есть только на сложных инструкциях (блоки, модификаторы и т.п.)
Цитировать
Гаррилл:
Но всякие мои дружки-дизайнеры не любят писать PHP

Им можно сказать что это такая "специальная" шаблонная фича, а не PHP код. :D
Цитировать
Макс:
имхо получился урезанный smarty

Нееее. До урезаного Smarty ещё очень далеко, а вот улутченый FastTemplate... ;)
Название: Зацените принципы ещё одного class Template
Отправлено: Гаррилл от 06 Мая 2003, 20:57:32
[OFF]Географию учил. Два дня не спал.[/OFF]
Сначала это был phplib-овский темплейт, потом phpbb-шники модифицировали под себя, потом я под себя. От предыдущего phpbb-шного в нынешнем осталось процентов 20.
Цитировать
Tronyx:
Впринципе это без особых проблем можно сделать и на "php шаблонах".

Угу. Но это не то. Сам же понимаешь :)
Цитировать
Tronyx:
Им можно сказать что это такая "специальная" шаблонная фича,

Так нельзя. Надо быть с чистой совестью :) .
Цитировать
Tronyx:
До урезаного Smarty ещё очень далеко, а вот улутченый FastTemplate

Задача была не быть сопоставимым со Smarty, а сделать быстрый и довольно-таки функциональный шаблонизатор с самыми необходимыми функциями. А необходимыми для проекта были ещё и инклуды, и ифы, естественно блоки с неогр. вложенностью + для удобства сделал функцию array_select_form, чтобы создавать селект-формы любой сложности (хоть деревья или multiply-и).
Нормально ли идея на PHP реализована? Нет ли кривого кода?
Название: Зацените принципы ещё одного class Template
Отправлено: Tronyx от 06 Мая 2003, 23:09:42
Цитировать
Гаррилл:
Нормально ли идея на PHP реализована? Нет ли кривого кода?

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

Цитировать
Гаррилл:
Задача была не быть сопоставимым со Smarty

Это шутка, не принимай всерьёз. :)
Название: Зацените принципы ещё одного class Template
Отправлено: Гаррилл от 07 Мая 2003, 19:04:24
Цитировать
Tronyx:
Это шутка, не принимай всерьёз.

Цитировать
Гаррилл:
Я нормальный :) Орать, что обиделся не буду

Цитировать
Tronyx:
единственное что могу сказать, это то что надо вынести функции компиляции в отдельный файл, который будет подключаться только если нужна компиляция шаблона.

А зафиг? Функция-компилировщик занимает всего 72 строчки, а ради этого баловаться require_once не стоит. Это в Smarty - 53 кб, выгодно подключать, когда надо.
Название: Зацените принципы ещё одного class Template
Отправлено: Гаррилл от 07 Мая 2003, 19:06:46
Цитировать
Tronyx:
просто у меня уже давно свой компилятор шаблонов

Опытом не поделишься? :)