|
Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Шаблоны |
|
Шаблоны
|
редкий гость Сообщения: 1696 |
Профиль | Сайт | Отправить PM | Цитировать Кто-нибудь использует что-нибудь подобное для своих сайтов? Давайте делиться реализациями, вот это я сегодня целый час писал (как долго... .
файл templates.php: <? // (c)2002 Иван Коростелёв aka ivank // mailto: ivank@beep.ru // http://ivank.hut.ru // Функции работы с шаблонами. include 'settings/templates.txt'; function insert_template( $name, $params = array() ) { * *if( !array_key_exists( $name, $GLOBALS['html_templates'] ) ) * * * *return; * *$template = strtr( * * * *$GLOBALS['html_templates'][$name], * * * *array( '{{' => "\x01", '}}' => "\x02" ) ); * *preg_match_all( "/\{[!#$%][^\}]+\}/" , $template, $matches ); * *//print_r( $matches ); * *if( sizeof( $matches[0] ) == 0 ) * *{ * * * *echo $template; * * * *return; * *} * *for( $i=0; $i < sizeof( $matches[0] ); ++$i ) * *{ * * * *$match = $matches[0][$i]; * * * *// Выводим, то что до темплейта. * * * *$match_pos = strpos( $template, $match ); * * * *echo substr( $template, 0, $match_pos ); * * * *// Удаляем, то что вывели и сам темплейт из текста * * * *$template = substr( * * * * * *$template, * * * * * *strlen( $match ) + $match_pos, * * * * * *strlen( $template ) ); * * * *do_real_work( $match, $params ); * *} * *echo $template; } function do_real_work( &$match, &$params ) { * *// А тут уже занятия собственно выводом шаблона * *$type = substr( $match, 1, 1 ); * *$match = substr( $match, 2, strlen( $match )- 3 ); * *switch( $type ) * *{ * *case '!': * * * *template_call_function( $match, $params ); * * * *break; * *case '#': * * * *// Вставка другого шаблона * * * *template_insert_template( $match, $params ); * * * *break; * *case '$': * * * *// Вставляем переменную. * * * *echo get_variable( $match, $params ); * * * *break; * *case '%': * * * *template_parse_expression( $match, $params ); * * * *break; * *} } function get_variable( $name, $params ) { * *if( substr( $name, 0, 1 ) == '$' ) * * * *$name = substr( $name, 1, strlen( $name ) ); * *preg_match_all( "/[^\[\] ]+/", $name, $match ); * *if( array_key_exists( $match[0][0], $params ) ) * * * *$cur_var =& $params[ $match[0][0] ]; * *elseif( array_key_exists( $match[0][0], $GLOBALS ) ) * * * *$cur_var =& $GLOBALS[ $match[0][0] ]; * *if( !isset( $cur_var ) ) * * * *return ""; * *for( $j = 1; $j < sizeof( $match[0] ); ++$j ) * * * *$cur_var =& $cur_var[ $match[0][$j] ]; * *return $cur_var; } function template_call_function( &$match, &$params ) { * *preg_match_all( "/[^\(\),]+/", $match, $match ); * *$func_params = array(); * *for( $j = 1; $j < sizeof( $match[0] ); ++$j ) * *if( substr( $match[0][$j], 0, 1 ) == '$' ) * * * *$match[0][$j] = get_variable( $match[0][$j], $params ); * *if( function_exists( $match[0][0] ) ) * * * *if( sizeof( $match[0] ) == 1 ) * * * * * *call_user_func( $match[0][0] ); * * * *else * * * * * *call_user_func_array( $match[0][0], array_slice( $match[0], 1 ) *); } function template_parse_expression( &$expr, &$params ) { * *preg_match( "/(\w+)\s*\(\s*([^\)]+)\)\s*(.+)/", $expr, $match ); * *switch( $match[1] ) * *{ * *case 'if': * * * *preg_match_all( '/[^ ]+/', $match[2], $expr ); * * * *for( $i = 0; $i < sizeof( $expr[0] ); ++$i ) * * * * * *if( substr( $expr[0][$i], 0, 1 ) == '$' ) * * * * * * * *$expr[0][$i] = get_variable( $expr[0][$i], $params ); * * * *$do_it = true; * * * *switch( $expr[0][1] ) * * * *{ * * * * * *case '==': * * * * * * * *if( $expr[0][0] == $expr[0][2] ) * * * * * * * *$do_it = true; * * * * * *break; * * * *case '!=': * * * * * * * *if( $expr[0][0] !== $expr[0][2] ) * * * * * * * *$do_it = true; * * * * * *break; * * * *} * * * *if( $do_it ) * * * *{ * * * * * *$match[3] = '{'.$match[3].'}'; * * * * * *do_real_work( $match[3], $params ); * * * *} * * * *break; * *} } function template_insert_template( &$match, &$params ) { * *preg_match_all( "/[^\(\),]+/", $match, $match ); * *$template_params = array(); * *for( $j = 1; $j < sizeof( $match[0] ); ++$j ) * *{ * * * *preg_match_all( "/[^=]+/", $match[0][$j], $param ); * * * *if( substr( $param[0][1], 0, 1 ) == '$' ) * * * * * *$param[0][1] = get_variable( $param[0][1], $params ); * * * *$template_params[ $param[0][0] ] = $param[0][1]; * *} * *insert_template( $match[0][0], $template_params ); } ?> <? // Шаблоны. это такие чтучки, что б дизайн делать :) $html_templates = array(); // Общие настройки дизайна. // Модкль отображается в нормально режиме -- с менюхами итп. $html_templates['normal'] = <<<HTML {#header} <center><table width=100%><tr><td width=150 valign=top> {#side_module(name=Навигация,template=menu)} {%if( \$request[0][0] != main ) if( \$request[0][0] != not_found ) *#side_module(name=В разделе,template=submenu)} </td><td width=100% valign=top>{!module_output()}</td></tr></table></center> {#footer} HTML; $html_templates['header'] = <<<HTML {!do_cookies()}<html><head><title>Here's title</title><head><body bgcolor=999999> <center><table width=90% bgcolor=cccccc><tr><td> <h2 align=center>Welcome to the SHE test site!</h2> HTML; $html_templates['footer'] = <<<HTML </td></tr></table></center></body></html> HTML; // Ну это для... не знаю как объяснить. Пока... $html_templates['side_module'] = <<<HTML <table width=100% bgcolor=black><tr><td> <table width=100% bgcolo=ccccc0 cellspacing=1> <tr bgcolor=9999cc><td><center><b>..::{\$name}::..</b></center></td></tr> <tr bgcolor=cccc99><td>{!insert_template(\$template)}</td></tr></table> </td></tr></table> HTML; // Настройка меню. $html_templates['menu'] = <<<HTML <p align=right>Главная<br> Дайджест<br> О проекте<br> Ссылки</p> HTML; $html_templates['submenu'] = <<<HTML <p align=right>{!insert_sub_menu()}</p> HTML; $html_templates['submenu_item'] = <<<HTML <a href="{\$url}">{\$title}</a><br> HTML; ?> Теперь в основном файле мне достаточно подключить требуемый модуль, написать: и он сам обрастёт требуемым дизайном. Каждый шаблон должен начинаться так: И заканчиваться просто: Всё что находится между фигурными скобками является указанием препроцессору:
Примеры этих конструкций выделены жирным в templates.txt Нравится? На этом будет построен новый движок oszone.net |
|
------- Отправлено: 10:34, 31-01-2002 |
Ночной странник Сообщения: 4050
|
Профиль | Сайт | Отправить PM | Цитировать ivank
вот и пришло время обновить, и изменить взгляды и подходы... GoDleSS Цитата:
я бы сказал что купить сервер по мощьнее будет дешевле... |
|
------- Отправлено: 09:32, 04-06-2006 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 24
|
Профиль | Отправить PM | Цитировать Vlad Drakula, это пока для себя. Но будем считать, что данное выссказывание подорвало меня на создание нормальной библиотеки.
|
Отправлено: 01:41, 06-06-2006 | #12 |
Ночной странник Сообщения: 4050
|
Профиль | Сайт | Отправить PM | Цитировать GoDleSS
зачем создавать библиотеку когда можно обойтись одной стандартной функцией??? |
------- Отправлено: 10:54, 06-06-2006 | #13 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Шаблоны и исходники проекта | prokazzza | Проект WinStyle | 26 | 16-12-2009 23:39 | |
Административные шаблоны | Dr.FRECH | Microsoft Windows NT/2000/2003 | 0 | 18-10-2007 09:38 | |
MSFT SQL Server - Шаблоны отчетов | dzhserv | Программирование и базы данных | 1 | 04-09-2007 17:51 | |
перегруженные шаблоны | papam | Программирование и базы данных | 1 | 28-11-2005 11:29 | |
Шаблоны сайтов.... | Guest | Вебмастеру | 2 | 25-05-2004 17:55 |
|