Автор Тема: Зацените принципы ещё одного class Template  (Прочитано 8648 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Гаррилл

  • Наглый тип
  • Постоялец
  • ***
  • Сообщений: 202
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phpbbcms.sf.net
Вот и я сделал template engine. Начинал не с нуля, а с исходников от phpbb.
Переделал компилировщик (теперь он генерит нормальный php), добавил такую функциональность, как , .
С динамическими блоками и обычными вариаблами работает, как раньше с ИФами и инклудами так:



main_tpl
.tpl
<!-- IF isset({var:IS_ADMIN}) -->
	
<!-- INCLUDE 
SOME_ADMIN_BOX -->
<!-- ELSEIF 
some_php_function({var:ANY_VARIABLE}) < .... {var:TRALI_VALIetc PHP -->
	
<!-- 
BEGIN block1 -->
	
	
<!-- IF isset({var:
block1.VALUE}) -->
	
	
//всякий хипер текст маркап лэнгвич
	
	
<!-- ENDIF -->
	
<!-- 
END block1 -->
<!-- ENDIF -->


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


php.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
« Последнее редактирование: 05 Мая 2003, 16:26:32 от Tronyx »

Оффлайн Xander

  • санитар леса
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1780
  • +0/-0
  • 2
    • Просмотр профиля
Зацените принципы ещё одного class Template
« Ответ #1 : 04 Мая 2003, 20:16:54 »
Гаррилл
а можешь вкратце сказать, чем от SSI отличается?
возможностью использовать PHP?
•••Jah\'d never let us down!•••

Оффлайн Гаррилл

  • Наглый тип
  • Постоялец
  • ***
  • Сообщений: 202
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phpbbcms.sf.net
Зацените принципы ещё одного class Template
« Ответ #2 : 04 Мая 2003, 20:25:17 »
Xander
Я, если честно (может быть, стыдно должно быть), не знаю, как работает SSI, я его только юзать умею.
А отличается, наверное, и присутствием только одного php.

Оффлайн Tronyx

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 826
  • +0/-0
  • 2
    • Просмотр профиля
Зацените принципы ещё одного class Template
« Ответ #3 : 04 Мая 2003, 20:44:13 »
Гаррилл ты не можешь свой класс в архиве на своём сайте выложить?
С уважением, Владимир Гончаренко - COPI# 93
Ролевая онлайн игра

Оффлайн Гаррилл

  • Наглый тип
  • Постоялец
  • ***
  • Сообщений: 202
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phpbbcms.sf.net
Зацените принципы ещё одного class Template
« Ответ #4 : 04 Мая 2003, 21:00:13 »
Морочиться с ssh и cvs нет времени - там дира на sourceforge с ph* долго открывается (проектов на php много), а мне надо к экзамена выпускным/ЕГЭ/вступительным готовиться. Могу на мыло выслать.

Оффлайн Tronyx

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 826
  • +0/-0
  • 2
    • Просмотр профиля
Зацените принципы ещё одного class Template
« Ответ #5 : 04 Мая 2003, 21:30:15 »
Цитировать
Гаррилл:
а мне надо к экзамена выпускным/ЕГЭ/вступительным готовиться.

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

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

Да это чтобы не захломлять топик длииными месагами со смайликами место скобок.
С уважением, Владимир Гончаренко - COPI# 93
Ролевая онлайн игра

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Зацените принципы ещё одного class Template
« Ответ #6 : 04 Мая 2003, 22:04:40 »
никогда не понимал, чем это


   

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


лучше этого


   

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


Оффлайн Гаррилл

  • Наглый тип
  • Постоялец
  • ***
  • Сообщений: 202
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phpbbcms.sf.net
Зацените принципы ещё одного class Template
« Ответ #7 : 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 в теле главного скрипта, т.к. генерится нормальный код, который быстро выводится.
Впрочем, рабочий сайт покажу, но ближе к июлю.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Зацените принципы ещё одного class Template
« Ответ #8 : 04 Мая 2003, 23:46:26 »
Цитировать
навязали временем

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

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

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

Не вопрос. ради моды некоторые даже на физические мучения идут. что уж тут говорить...

Оффлайн Гаррилл

  • Наглый тип
  • Постоялец
  • ***
  • Сообщений: 202
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phpbbcms.sf.net
Зацените принципы ещё одного class Template
« Ответ #9 : 05 Мая 2003, 00:15:57 »
Цитировать
RomikChef:
меняется три файла: шапка, ноги и таблица стилей.

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

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

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Зацените принципы ещё одного class Template
« Ответ #10 : 05 Мая 2003, 10:34:49 »
Цитировать
мои дружки-дизайнеры не любят писать PHP

а на этом просто обожают.
С этого бы и начинал

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Зацените принципы ещё одного class Template
« Ответ #11 : 05 Мая 2003, 11:50:05 »
имхо получился урезанный smarty
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Tronyx

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 826
  • +0/-0
  • 2
    • Просмотр профиля
Зацените принципы ещё одного class Template
« Ответ #12 : 05 Мая 2003, 17:11:32 »
Цитировать
RomikChef:
никогда не понимал, чем это
...
лучше этого

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

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

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

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

Нееее. До урезаного Smarty ещё очень далеко, а вот улутченый FastTemplate... ;)
С уважением, Владимир Гончаренко - COPI# 93
Ролевая онлайн игра

Оффлайн Гаррилл

  • Наглый тип
  • Постоялец
  • ***
  • Сообщений: 202
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phpbbcms.sf.net
Зацените принципы ещё одного class Template
« Ответ #13 : 06 Мая 2003, 20:57:32 »
[OFF]Географию учил. Два дня не спал.[/OFF]
Сначала это был phplib-овский темплейт, потом phpbb-шники модифицировали под себя, потом я под себя. От предыдущего phpbb-шного в нынешнем осталось процентов 20.
Цитировать
Tronyx:
Впринципе это без особых проблем можно сделать и на "php шаблонах".

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

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

Задача была не быть сопоставимым со Smarty, а сделать быстрый и довольно-таки функциональный шаблонизатор с самыми необходимыми функциями. А необходимыми для проекта были ещё и инклуды, и ифы, естественно блоки с неогр. вложенностью + для удобства сделал функцию array_select_form, чтобы создавать селект-формы любой сложности (хоть деревья или multiply-и).
Нормально ли идея на PHP реализована? Нет ли кривого кода?

Оффлайн Tronyx

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 826
  • +0/-0
  • 2
    • Просмотр профиля
Зацените принципы ещё одного class Template
« Ответ #14 : 06 Мая 2003, 23:09:42 »
Цитировать
Гаррилл:
Нормально ли идея на PHP реализована? Нет ли кривого кода?

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

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

Это шутка, не принимай всерьёз. :)
С уважением, Владимир Гончаренко - COPI# 93
Ролевая онлайн игра

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28