Forum Webscript.Ru
Программирование => PHP => Тема начата: Гаррилл от 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
-
Гаррилл
а можешь вкратце сказать, чем от SSI отличается?
возможностью использовать PHP?
-
Xander
Я, если честно (может быть, стыдно должно быть), не знаю, как работает SSI, я его только юзать умею.
А отличается, наверное, и присутствием только одного php.
-
Гаррилл ты не можешь свой класс в архиве на своём сайте выложить?
-
Морочиться с ssh и cvs нет времени - там дира на sourceforge с ph* долго открывается (проектов на php много), а мне надо к экзамена выпускным/ЕГЭ/вступительным готовиться. Могу на мыло выслать.
-
Гаррилл:
а мне надо к экзамена выпускным/ЕГЭ/вступительным готовиться.
Да... Запихнуть пару килобайт кода в ZIP архив и закинуть по FTP к себе на сервер это серьёзная преграда подготовке к экзаменам. :D
Гаррилл:
Могу на мыло выслать.
Да это чтобы не захломлять топик длииными месагами со смайликами место скобок.
-
никогда не понимал, чем это
//всякий хипер текст маркап лэнгвич
лучше этого
IF isset($IS_ADMIN) { ?>
} ELSEIF (some_php_function($ANY_VARIABLE})) { < .... {var:TRALI_VALI} etc PHP -->
IF isset($block1.VALUE) {?>
//всякий хипер текст маркап лэнгвич
} ?>
} ?>
-
Tronyx
Тут есть тектовая версия
http://kirill-gar.fromru.com/template.php (смотреть надо html-source)
Есть и
http://kirill-gar.fromru.com/template.zip
ZIP архив и закинуть по FTP к себе на сервер это серьёзная преграда
Там нет FTP.
RomikChef
Я тоже. Но это навязали временем. К этому, может быть, привыкли дизайнеры. И если уж на то пошло, то вообще можно без шаблонизаторов обходиться. Но как же быть при лёгкой смене дизайна, смене скинов страницы? Без шаблонов фигово. Да и, если так выразиться, не модно :)
Хотя мой вариант при кэшировании работает абсолютно также, как и echo в теле главного скрипта, т.к. генерится нормальный код, который быстро выводится.
Впрочем, рабочий сайт покажу, но ближе к июлю.
-
навязали временем
не понял
привыкли дизайнеры
повторяю. не вижу разницы. вряд ли ее и дизайнеры заметят.
Но как же быть при лёгкой смене дизай
меняется три файла: шапка, ноги и таблица стилей.
не модно
Не вопрос. ради моды некоторые даже на физические мучения идут. что уж тут говорить...
-
RomikChef:
меняется три файла: шапка, ноги и таблица стилей.
Если абстрактно рассуждать, то всё просто. Но на деле, когда нужна и функциональность, и скорость, и удобство не всё так просто. А, например, мне шапки, тела, футера ох как мало. Мне нужна ещё визуальная генерация деревьев, и дин. блоки и возможность создавать колонки и ленты путём прописывания 6 строк.
повторяю. не вижу разницы. вряд ли ее и дизайнеры заметят.
Насчёт долларов/недолларов. А какая здесь уже разница? Всё равно всё вместе парсится один раз. Тем более, чтобы отпарсить $ и {} пишешь один и тот же код. Соглашусь, что это всё фигня. Но не фигня заключается в том, что ему легче писать
, чем - (бред, а не пример :)) Но всякие мои дружки-дизайнеры не любят писать PHP, только html (я же не виноват).
О! Нашёл в чём шаблоны проще :))
легче для понимания, чем for($i=0; $i
-
мои дружки-дизайнеры не любят писать PHP
а на этом просто обожают.
С этого бы и начинал
-
имхо получился урезанный smarty (http://smarty.php.net)
-
RomikChef:
никогда не понимал, чем это
...
лучше этого
Конкретно в данном случае ничем. А вот при использовании более "крутых" шаблонных инструкций, вариант на PHP будет заметно длиннее и сложнее для дизайнера/кодера.
Гаррилл:
Но как же быть при лёгкой смене дизайна, смене скинов страницы?
Впринципе это без особых проблем можно сделать и на "php шаблонах".
RomikChef:
меняется три файла: шапка, ноги и таблица стилей.
ИМХО так неудобно. Когда дизайн в одном файле ты сразу видишь весь шаблон, а не только до контента или после.
Гаррилл:
ему легче писать
, чем
Невижу ни каких принципиальных различий, ну разве что во втором варианте на 4 символа больше :) Повторяю: разница есть только на сложных инструкциях (блоки, модификаторы и т.п.)
Гаррилл:
Но всякие мои дружки-дизайнеры не любят писать PHP
Им можно сказать что это такая "специальная" шаблонная фича, а не PHP код. :D
Макс:
имхо получился урезанный smarty
Нееее. До урезаного Smarty ещё очень далеко, а вот улутченый FastTemplate... ;)
-
[OFF]Географию учил. Два дня не спал.[/OFF]
Сначала это был phplib-овский темплейт, потом phpbb-шники модифицировали под себя, потом я под себя. От предыдущего phpbb-шного в нынешнем осталось процентов 20.
Tronyx:
Впринципе это без особых проблем можно сделать и на "php шаблонах".
Угу. Но это не то. Сам же понимаешь :)
Tronyx:
Им можно сказать что это такая "специальная" шаблонная фича,
Так нельзя. Надо быть с чистой совестью :) .
Tronyx:
До урезаного Smarty ещё очень далеко, а вот улутченый FastTemplate
Задача была не быть сопоставимым со Smarty, а сделать быстрый и довольно-таки функциональный шаблонизатор с самыми необходимыми функциями. А необходимыми для проекта были ещё и инклуды, и ифы, естественно блоки с неогр. вложенностью + для удобства сделал функцию array_select_form, чтобы создавать селект-формы любой сложности (хоть деревья или multiply-и).
Нормально ли идея на PHP реализована? Нет ли кривого кода?
-
Гаррилл:
Нормально ли идея на PHP реализована? Нет ли кривого кода?
Если честно, то я особо к коду не присматривался (просто у меня уже давно свой компилятор шаблонов), единственное что могу сказать, это то что надо вынести функции компиляции в отдельный файл, который будет подключаться только если нужна компиляция шаблона.
Гаррилл:
Задача была не быть сопоставимым со Smarty
Это шутка, не принимай всерьёз. :)
-
Tronyx:
Это шутка, не принимай всерьёз.
Гаррилл:
Я нормальный :) Орать, что обиделся не буду
Tronyx:
единственное что могу сказать, это то что надо вынести функции компиляции в отдельный файл, который будет подключаться только если нужна компиляция шаблона.
А зафиг? Функция-компилировщик занимает всего 72 строчки, а ради этого баловаться require_once не стоит. Это в Smarty - 53 кб, выгодно подключать, когда надо.
-
Tronyx:
просто у меня уже давно свой компилятор шаблонов
Опытом не поделишься? :)