Сначала хотел сделать такую фичу как у WP short-коды но пошел другим путем и почему бы не сделать php шаблоны. например: дизайнер пишет в шаблоне {if:$var > 10} message here... {end} шаблонизатор переведет в <?php if($var > 10) { ?> message here... <?php } ?> В реализации этот шаблонизатор прост(всего одно регулярное выражение). Можно добавлять свои шаблоны кодов. С назначением своим справляется. Или нет ? Хотелось бы услышать критику и предложения. Скачать можно тут
Что есть ? я там не нашел ничего общего с моим. У меня нету цели своим шаблонизатором переплюнуть чей то. Я юзал Smarty, RainTPL, XTemplate в различных проектах. Но тут в моей CMS мне нужно было 1) желательно не юзать чужую наработку(библиотеку) 2) что то простое, легкое и не сложное.
меня смущают скобки { } которые используются в любом javascript и css как в вашем шаблонизаторе решена эта проблема?
IMHO, не удобно всё это. Направление кавычек меняется, логику всё равно приходится писать в шаблоне, знак $ остаётся, конструкция if-end (если-конец) совсем не интуитивно понятна, притом количество кода уменьшилось только на несколько символов. Тот же PHP, только наоборот.
я вижу смысл в этих шаблонизаторах только в автоматическом парсере коротких скобок в длинные <? $content; ?> преобразовывал бы в <?php echo $content ; ?>
парсер затрагивает только те шаблоны что есть в массиве шаблонов $tcodes так что с этим кодом например: Код (Text): <script> $(function() { $( "#accordion" ).accordion({}); }); </script> ничего не случится
Логику отображение можно писать в шаблоне. Это есть (if,loop и пр.) в любом шаблонизаторе. дык. в каком шаблонизаторе его нету ?
Awilum мне идея нравится хотя я еще не совсем вник в ее. только вот что если заметить скобки { } на <% %> тогда они будут отображатся в Notepad++ как особые области и не смешиваться с кодом.
хм в принципе можно сделать настраиваемые теги. ток тут не уверен пока на каких может сломаться регулярка сейчас проверил с такими тегами {cut:'hello':5} <%cut:'hello':5%> да можно заменить на <% %> - работает. p.s. дока потихоньку наполняется http://www.tcodes.template-cms.org/
titch а как asp связан с шаблоном? шаблон НИКОГДА не исполняется. Он берется как текст, проходит через фильтр и далее либо сохраняется в отдельный файл, либо выполняется на лету, и скобки какие они бы не были там уже отсутвуют вовсе.
Alex_pac, хм, иногда исполняется. Обрабатывается сначала, а потом пропускается через eval. Считаю это неправильным. Для того он и шаблон, чтобы его использовать, как шаблон. Если есть if-else, то это уже не язык разметки, а язык программирования. Но это только моё мнение, ты же спрашивал... В PHPLib Template, например (короткое описание http://kurilka.co.ua/archives/phplib-template/).
TCode 1.0.1 + Реорганизовал папки... + Добавил возможность задавать свой вид тега $tag_start тег $tag_end + Захостил на Битбакет
Awilum вы меня вдохновили и я написал ремейк на ваш шаблонизатор шаблонизатор template_sys.php PHP: <?php # utf-8 document #template sys v 0.1 # шаблонизатор версия 0.1 # Alex_pac 2011 [email=alexpac26@yandex.ru]alexpac26@yandex.ru[/email] # free GNU modul php class template { # static global class static $mask = array ( # if:$expr 'if:(\([^;]+\))', '<?php if $1 { ?>', /**/ 'iU', # else 'else','<?php } else { ?>', /**/ 'iU', # elseif:$expr 'elseif:(\([^;]+\))', '<?php } elseif $1 { ?>', /**/ 'iU', # endif '(endif|end|endfor|endforeach)', '<?php } ?>', /**/ 'Ui', # foreach:($var1 as $var2) 'foreach:(\([^;]+\))','<?php foreach $1 { ?>', /**/ 'iU', # for:($i=0; $i<10; $i++) 'for:(\([^\)]+\))','<?php for $1 { ?>', /**/ 'iU', # echo short '(\$[^;]+)', '<?php echo $1; ?>', /**/ 'iU', #echo:$conts 'echo:(\$[^;]+)', '<?php echo $1; ?>', /**/ 'iU', #php:{ script } 'php:(.+)', '<?php $1 ?>', /**/ 'Usi', #var:$conts = $value 'var:(\$[^;]+ ?= ?["]?.*["]?)', '<?php $1; ?>', /**/ 'iU', #charset:utf-8 'charset:(.+)', '<?php header("Content-Type: text/html;charset=$1"); ?>', /**/ 'iU', ); static $r1 = '/\<% '; static $r2 = ' %\>/'; static function convert_by_mask($text) { $c = count(self::$mask); for ($i=0; $i<$c; $i+=3) { $text = preg_replace(self::$r1.self::$mask[$i].self::$r2.self::$mask[$i+2], self::$mask[$i+1], $text); } } static function export_temp ($file) { # экcпорт в файл $FP=fopen($file.'.php',"w"); fwrite($FP,self::get_temp($file,false)); fclose($FP); } static function get_temp($file, $eval=true) { # получение кода шаблона, при $eval = false не добавляет закрывающую скобку $text = file_get_contents($file); self::convert_by_mask(&$text); if ($eval) { return '?>'.$text; } return $text; }} if (isset($__template)) { eval (template::get_temp($__template)); die(); } шаблон sha.html HTML: <% charset:utf-8 %> <!--установка кодировки --> <html> <head> <title> <% $title %> </title> <style> .exp { color: blue; background-color: #FFCCFA; } </style> </head> <body> <P class = "exp">проверка вывода статики (короткий echo) </P><P> <% $content %> <P class = "exp">проверка вывода статики (обычный echo) </P><P> <% echo:$content %> <P class = "exp">проверка объявления структуированной переменной </P><P> <% var:$newp = "<font color=red>Новый параметр :: ".$content.", $title </font>" %> <% $newp %> <P class = "exp">работа условий </P><P> <% var:$rand = mt_rand(1,3) %> <% if:($rand == 1) %> результат 1 <% elseif:($rand == 2) %> результат 2 <% else %> результат 3 <% endIf %> <P class = "exp">определяем случайный массив и выводим его </P><P> <% for:($i=0; $i<7; $i++) %> <% var:$massive[$i*2] = mt_rand(1,20) %> <% endFor %> <% foreach:($massive as $key => $value) %> <% $key %> : <% echo:$massive[$key] %> S , <% echo:$key %> : <% $massive[$key] %> D , <% endForeach %> <P class = "exp">выполнение скрипта </P><P> <% php: print time(); for ($i=0; $i<10; $i++) { echo 12; } %> </body> тестовый скрипт test.php PHP: <?php include ('template_sys.php'); $title = 'переменная $title'; $content = 'переменная $content'; $t = template::get_temp('sha.html'); //template::export_temp('sha.html'); экспорт шаблона в php файл //print $t; eval ($t); //выполнение шаблона результат работы test.php скачать исходник http://webdrive.avtograd.ru/Download/Al ... my_sha.zip ******** дополнение наглядная демонстрация выделяющей окраски шаблона в редакторе Notepad++ благодаря <% %> псевдо ASP скобкам.
никогда не говори никогда. в таком шаблонизаторе он не исполняется, пока ты его используешь. как только до этого шаблона доберутся чужие руки, шаблон будет вести себя как обдолбанный мутант. в противоположность тому, есть шаблоны, к примеру, LJ. вот в них гарантировано ничего исполняться не будет.
чтобы там гарантировано ниче не исполнялось надо просто шаблону поставить расширение txt или tlp чтобы интерпретатор думал что это текст.
Мне больше всего понравился вот этот: http://www.php.ru/forum/viewtopic.php?p=201089#201089 Можно пример, я не совсем понимаю что ты имеешь ввиду. Alex_pac У меня шаблоны хранятся в tpl и прекрасно запускаются.
да хоть настоящий jpeg, все, что между дескрипторами <?php / <? и ?> будет выполнятся, если делать include или require или eval.
Ответьте блондину с голубыми глазами, почему передаете через указатель. Когда то туть шла дискусия, что по ссылкам быстрее бы было. Т.е. PHP: <? $text = self::convert_by_mask($text); Ну соответственно подправить функцию convert_by_mask.
братуха, если ты используешь include это значит что ты php-кодер, а значит ты знаеш что ты делаешь и следовательно намеренно хочеш все испортить и запустить неоткомплимированный шаблон.
можно вырезать php в шаблоне (<?php / <? и ?>) Код (Text): $template_code = preg_replace( array("/\<\?/","/\?\>/"), array("<?","?>"), $template_code ); код не мой. не проверял, но должен работать..