php_templates 1.7

su1d

Старожил PHPClubа
LENNY, не боись.. оно будет работать так же, как и раньше..
ну.. может с небольшими такими отклонениями, но много тебе менять не придётся по-любому =)

надо же баги исправлять когда-то, а не оставлять их "по историческим причинам" =)
 

tony2001

TeaM PHPClub
>надо же баги исправлять когда-то, а не оставлять их "по историческим причинам" =)
хорошая мысль =)
backward bug compatibility - чтобы исправить старые баги надо добавить новые, чтобы их кол-во было четным...
 

su1d

Старожил PHPClubа
в этом и состоит великое искусство программирования:
добавлять новые баги так, чтобы они
взаимоисключались со старыми. =)
 

LENNY

Guest
возник у меня новый баг...

щаблон такой:

Начало шаблона
<tmpl:f1>
Блок ф1
</tmpl:f1>

<tmpl:f2>
=>Начало блока ф2

<tmpl:row>
А это вызывается 100 раз
</tmpl:row>

=>Конец блока ф2
</tmpl:f2>

Дык вот когда блок 'row' отпарсится (100 раз) он сразу как бы парсит блок f2, и если дальше стоит что нибудь типа

tmpl_set($template,'f2/x','555'); , то блок 'f2' отпарсится ещё раз...

Короче я понимаю что объяснил немного сумбурно, но идея в целом должна быть понятна...
 

SWizard

Guest
а как насчёт выложить php-templates в виде класса?
Дело в том что немногие провайдеры хотят менять конфиг PHP. Как решить эту проблему?
 

tony2001

TeaM PHPClub
>а как насчёт выложить php-templates в виде класса?
они на Сях, это модуль РНР, а не РНР-класс.
"эмулятор" на РНР еще не готов.
 

Serjoza

Guest
Что-то я не пойму версия 1.7 php_template (под Windows) акомпилирована под РНР 4.3.0...

я сейчас поставил новый РНР 4.3.1 и он не работает с ней...


прошу прощения, всё подправил, ошибся сам....
 

Serjoza

Guest
PHP:
<table>
	<tmpl:TableCaption>
		<tr>
			<td>
				-->>{TCaption}
			</td>
		</tr>
	</tmpl:TableCaption>
	
	<tmpl:TableRow>
		<tr>
			<td>
				 ==>>{TCell}
			</td>
		</tr>
	</tmpl:TableRow>
</table>
подскажите как проавильно написать скрипт вот под этот шаблон???

вроде всё просто, но что-то не выходит ни как...
заранее благодарен...
 

ONK

Пассивист PHPСluba
Давно хотел протестировать работу этого модуля обработки шаблонов, да всё времени небыло этим заняться. Вот нашлось время, провёл несколько простейших тестов. Я если честно ожидал большего отрыва от моего движка, который написан всётаки на ПХП, думал что выигрыш в производительности будет процентов 500 - 700.. Но тесты показали что использование этого модуля даёт увеличение скорости генерирования всего до 200%. Это тоже очень хороший результат, но на мой взгляд это не предел для встроенного модуля ПХП. К тому-же я заметил падение превосходства скорости генерирования из шаблона (по отношению к моему обработчику шаблонов) в тех случаях, когда в блоке заменяется не одна а несколько переменных.

Особенность тестирования - Перед тестированием я компилировал оба скрипта Zend encoder - ом, что повышало скорость их исполнения на моей машине ~ в 1,3 - 2 раза (мой ускорялся сильнее т.к. он написан на ПХП).

У меня небыло времени подробно изучать документацию по применению этого модуля, поэтому я мог его использовать не корректно. В связи с этим есть следующее предложение - я создаю шаблон средней сложности с несколькими динамическими блоками и парой десятков заменяемых переменных. Один из блоков будет состоять из строки ячеек таблици, для того чтобы, средствами скрипта, можно было генерировать таблици произвольного размера (длинны по вертикали). Для этого шаблона тот кто хорошо знает модуль php_templates создаёт оптимально написанный скрипт, который может генерировать таблицу с заданным количеством записей. время генерирования кода скриптом предлогается измерять с момента инициализации шаблона до момента окончания генерирования последнего блока. Я в свою очередь напишу аналогичный тест для своего обработчика шаблонов, хочется выяснить реальное превосхоство ПХП модуля на ПХП кодом (даже над очень хорошим ПХП кодом). Лично не сомневаюсь что лучшее решение - это конечно хорошо написанный ПХП модуль, для парсировки шаблонов, но этот модуль должен создавать ПХП объект совего класса, методами которого и должна происходить обработка шаблонов.
 

su1d

Старожил PHPClubа
В связи с этим есть следующее предложение
круто! кидай в меня шаблоном с описанием данных, которыми надо его набить. я тебе отвечу кодом для него.

этот модуль должен создавать ПХП объект совего класса
я сейчас работаю над этим.. скоро будет и класс.
 

su1d

Старожил PHPClubа
.des., проверяю.
всё получил, спасибо.
осталось только найти время, чтобы разобраца со всем,
с'merge'ить что ни попадя, и выложить куда попало. =)
 

ONK

Пассивист PHPСluba
su1d , посмотри приват, куда мне слать шаблон??
 

Name

Новичок
Ребята и мне шаблон.
Я тоже хочу со своим сравнить.
 

ONK

Пассивист PHPСluba
Сейчас, подправлю комментарии в шаблоне :)..
 

ONK

Пассивист PHPСluba
Шаблон состоит из 3-х блоков, основной блок содержит 24 переменные.

Шаблон достаточно простой, что позволяет легко реализовать его на любом шаблонном движке.

Вот код шаблона:

PHP:
Комментарии в своих шаблонах я могу писать где угодно, всё что вне блоков игнорируется.
У меня нет никаких правил на создание переменной, имя переменной просто ассоциируется с её значение и в последствии заменяется им.
Я создаю переменные (их имена) в том виде в котором они лучше отображаются в шаблоне. 

==============================

Блок верхушки таблици. Генерируется один раз. 
Содержит следующие переменные:

"#DDDDDC" 
™border 
™x 
"#CCCCCC"
"#FF0000"
™text

Все знаки кроме 
пробелов принадлежат имени переменной.
В именах некотрых переменных есть спецсимволы 
(для гарантированного отсутствия их в тексте).

<!-- START BLOCK0 -->
<br>
<table width="100%" border="0" cellspacing="0" cellpadding="0" bgcolor="#DDDDDC">
<tr>
<td>
<table width="100%" border=™border cellspacing="™x" cellpadding="4" bordercolor="#CCCCCC">
<tr>
<th bgcolor="#FF0000" colspan=6 >™text</td>
</tr>
<!-- END BLOCK0 -->


Следующий блок будет произвольно наращиваемым.
Проще всего передавать в командной строке параметр задающий 
количество итераций цикла (количество сгенерированных блоков).

"#FFFFF1" - "#FFFFF6" заменяем на #1FFFF1,#F1FFF1,#FF1FF1,#FFF1F1,#FFFF11,#FFFFF1 соотвественно порядку.

перед запуском цикла создаём переменные для хранения ссылок, комментариев к ссылкам и текстов ссылок.
$hr = 'thjyrebgdhcnstrgvbjrukl';
$ti = 'kfyundtwrrgdlmdvstqrbdi';
$te = 'yetsbavcplftwbcmfyrthsb';
Дальше два варианта тестирования (можно также предусмотреть параметр командной строки).

1.
™hr1 - ™hr6 заменяем на $hr
™title1 - ™title6 заменяем на $ti
™text1 - ™text6   заменяем на $te

2. Все три переменные заменяем на инкриментирующийся $i из массива for($i=0;...;$i++)
Это наверное самый чистый тест реальной работы парсёра шаблонов.

<!-- START BLOCK1 -->
<tr>
<td bgcolor="#FFFFF1">
<div align="left"><b>
<a href="™hr1" title="™title1">™text1</a>
</b></div>
</td>
<td bgcolor="#FFFFF2">
<div align="left"><b>
<a href="™hr2" title="™title2">™text2</a>
</b></div>
</td>
<td bgcolor="#FFFFF3">
<div align="left"><b>
<a href="™hr3" title="™title3">™text3</a>
</b></div>
</td>
<td bgcolor="#FFFFF4">
<div align="left"><b>
<a href="™hr4" title="™title4">™text4</a>
</b></div>
</td>
<td bgcolor="#FFFFF5">
<div align="left"><b>
<a href="™hr5" title="™title5">™text5</a>
</b></div>
</td>
<td bgcolor="#FFFFF6">
<div align="left"><b>
<a href="™hr6" title="™title6">™text6</a>
</b></div>
</td>
</tr>
<!-- END BLOCK1 -->

Следующий блок, закрывает открытые таблици.
<!-- START BLOCK2 -->
</table>
</td>
</tr>
</table>
<!-- END BLOCK2 -->

У меня в код встроена приблуда измеряющая полное время парсировки шаблона и генерирования 
из него кода (даже время генерирования кода из конкретного блока), 
по ней можно точно сказать сколько времени работал парсёр шаблонов, 
а сколько времени остальной код скрипта :).
Результат работы парсёра шаблонов, надо собирать в строковую переменную, а выводит код из строковой переменной надо после остановки таймера.
 

ONK

Пассивист PHPСluba
Чтобы было совсем понятно, привожу заготовку теста,, буду её сейчас мучать...

PHP:
<?php
include 'onk_tpl.php';
$mine_SH = new SHparser("test.htm");
$my_mark = new Time_mark();

if(isset($_GET['k'])){
	$k = $_GET['k'];
}else{
	$k = 0;
}

if(!empty($_GET['a'])){
	$a = 1;
}else{
	$a = 0;
}

$hr = 'thjyrebgdhcnstrgvbjrukl';
$ti = 'kfyundtwrrgdlmdvstqrbdi';
$te = 'yetsbavcplftwbcmfyrthsb';
if(!$a){
	$mine_SH->add(array('"#DDDDDC"'=>'#DDDDDC','™border'=>1,'™x'=>4,'"#CCCCCC"'=>'#CCCCCC','"#FF0000"'=>'#FF0000','™text'=>'Заголовок'),0);
	for($i=0;$i<$k;$i++){
		$mine_SH->add(array('™hr1'=>$i,'™hr2'=>$i,'™hr3'=>$i,'™hr4'=>$i,'™hr5'=>$i,'™hr6'=>$i,'™title1'=>$i,'™title2'=>$i,'™title4'=>$i,'™title4'=>$i,'™title5'=>$i,'™title6'=>$i,'™text1'=>$i,'™text2'=>$i,'™text3'=>$i,'™text4'=>$i,'™text5'=>$i,'™text6'=>$i,'"#FFFFF1"'=>'#1FFFF1','"#FFFFF2"'=>'#F1FFF1','"#FFFFF3"'=>'#FF1FF1','"#FFFFF4"'=>'#FFF1F1','"#FFFFF5"'=>'#FFFF1F','"#FFFFF6"'=>'#FFFFF1'),1);
	}
	$mine_SH->add(array(),2);
	$str = $mine_SH->show();
}else{
	$mine_SH->add(array(),0);
	for($i=0;$i<$k;$i++){
		$mine_SH->add(array('™hr1'=>$hr,'™hr2'=>$hr,'™hr3'=>$hr,'™hr4'=>$hr,'™hr5'=>$hr,'™hr6'=>$hr,'™title1'=>$ti,'™title2'=>$ti,'™title4'=>$ti,'™title4'=>$ti,'™title5'=>$ti,'™title6'=>$ti,'™text1'=>$te,'™text2'=>$te,'™text3'=>$te,'™text4'=>$te,'™text5'=>$te,'™text6'=>$te,'"#FFFFF1"'=>'#1FFFF1','"#FFFFF2"'=>'#F1FFF1','"#FFFFF3"'=>'#FF1FF1','"#FFFFF4"'=>'#FFF1F1','"#FFFFF5"'=>'#FFFF1F','"#FFFFF6"'=>'#FFFFF1'),1);
	}
	$mine_SH->add(array(),2);
	$str = $mine_SH->show();
}
echo $my_mark->current_time();
if(isset($_GET['f'])){
	echo $str;
}
?>
 
Сверху