| medar | 
					 | 
			
|---|---|
| 
					 Предлагаю тут обсудить наш шаблонизатор - xtemplate. 
						Основная, на мой взгляд, его проблема описана например здесь - это невозможность задавать условия вывода тэга: Допустим, что PAGE_EXTRA1 у нас должно выводить в теле страницы хтмл-ссылку. В форму PAGEADD_FORM_EXTRA1 мы вбили нужный адрес, но он не обработается на странице и выведется простым текстом, а нам нужна именно действующая ссылка вида Т.е. по каждому подобному чиху мы вынуждены писать плагин, который будет смотреть пустое поле или не пустое и формировать вывод соответственно. Теоретически можно сменить шаблонизатор, но практически, мне кажется, - это не выход. Предлагаю здесь обсудить как нам дописать функционал xtemplate. Например, как сделать механизм вывода по условию. rangjungyeshe.ru 
					 | 
			
| Sergeich | 
					 | 
			
|---|---|
| 
					 Так я в посте по ссылке предложил решение (юзерскую составляющую): 
						
					...весь обвес должен быть всё же в шаблоне, но будет хорошо, если обвес будет заключен в специальные комментарии, типа вот так: 
<!-- BEGIN: PAGE_EXTRA1 -->
<a href="{PAGE_EXTRA1}">НАША ССЫЛКА</a>
<!-- END: PAGE_EXTRA1 -->
Причём, чтобы не усложнять без необходимости шаблон, стандартый вариант без комментариев тоже должен работать, но уже без возможности удалить обвес при пустом PAGE_EXTRA1. ---------------- Я тут ещё немножко подумал :). практически любой тег у нас может быть пустым и может быть не пустым. Если тег не пустой, то всё выводится или в лоб (как сейчас), или в комментариях как в примере выше. Если тег пустой, то или вообще ничего не выводится, или же мы можем добавить в шаблон некий блок, который будет выводить необходимый обвес. Что-то типа такого: 
<!-- BEGIN OFF: PAGE_EXTRA1 -->
Здесь рыбы нет!
<!-- END OFF: PAGE_EXTRA1 -->
Это правило должно распространятся на некий набор тегов (а можно и на все), которые тянут информацию из базы. Плюс этого метода: - полная совместимость с действующими шаблонами. Если скинмейкер не хочет использовать сложные конструкции, то он их и не использует и верстает скины как сейчас. - если скинмейкер желает чтобы блоки информации у него на странице могли изменяться в зависимости от наличия информации в теге, то он использует новые комментарии 
<!-- BEGIN: PAGE_EXTRA1 -->
бла-бла-бла
<!-- END: PAGE_EXTRA1 -->
а при необходимости (но, не обязательно) и пустой блок-заглушку 
<!-- BEGIN OFF: PAGE_EXTRA1 -->
бу-бу-бу
<!-- END OFF: PAGE_EXTRA1 -->
                        Bu gönderi Sergeich tarafından düzenlendi (2009-02-12 00:13, 16 yıllar önce)
                     
                    
				 | 
			
| medar | 
					 | 
			
|---|---|
| 
					 Т.е. этот блок будет выводиться, только если в page.inc.php явно сделать парсинг области PAGE_EXTRA1 ? Имхо, нефункционально. Это придется делать $t->parse() по всем возможным тэгам, дозвиданья производительность. 
						Прочитал update. :) Я хочу предложить нечто похожее. Поковыряться в xtemplate.cpass.php в функции parse() и сделать например такую конструкцию: <!-- BEGIN: <условие> -->
<!-- END: <условие> -->rangjungyeshe.ru 
					
                        Bu gönderi medar tarafından düzenlendi (2009-02-12 00:29, 16 yıllar önce)
                     
                    
				 | 
			
| Sergeich | 
					 | 
			
|---|---|
| 
					 Я же пишу с позиции скинмейкера, как мне бы было удобно. А уж вам програмёрам нужно подумать как это реализовать технически :) 
						
					 | 
			
| Dayver | 
					 | 
			
|---|---|
| 
					 Вообще мысль хорошая... но не будет ли введение в шаблонизатор разнообразных проверок, по нагрузке на производительность, равнозначным "$t->parse() по каждой мелочи". ? 
						Pavlo Tkachenko aka Dayver 
					 | 
			
| medar | 
					 | 
			
|---|---|
| 
					 Очередная мысль. :) 
						А если <условие> сделать в виде строки, например IF_PAGE_EXTRA1_EQUAL_10 , то в xtemplate не придется лазить! Достаточно перед каждым финальным $t->parse("MAIN") вызывать функцию, которая бы парсила файл скина, находила эти условия, разбирала их и при надобности вызывала штатный $t->parse("MAIN.IF_PAGE_EXTRA1_EQUAL_10"); не будет ли введение в шаблонизатор разнообразных проверок, по нагрузке на производительность, равнозначным "$t->parse() по каждой мелочи". ?Нет, не должно. По крайней мере мы можем в самом начале перед регулярками проверять скин на наличие конструкций условий strpos($mskin, "BEGIN: IF")rangjungyeshe.ru 
					
                        Bu gönderi medar tarafından düzenlendi (2009-02-12 00:51, 16 yıllar önce)
                     
                    
				 | 
			
| Trustmaster | 
					 | 
			
|---|---|
| 
					 Интересно было бы сначала провести небольшое исследование, что нового появилось в последнее время среди шаблонизаторов, кроме пресловутых бинарных модулей для выделенных серверов. Менять шаблонизатор нам ни к чему, но может на идеи интересные нападем. 
						May the Source be with you! 
					 | 
			
| esclkm | 
					 | 
			
|---|---|
| 
					 Поддерживаю! Слишком здравая мысль! надо ее тут оформить и в идеи кинуть на день другой 
						И еще если будет IF то нужен будет и IF NOT littledev.ru - мой маленький зарождающийся блог о котонти. 
					снижение стоимости программирования и снижение стоимости производства разные вещи. Первое можно скорее сравнить с раздачей работникам дешевых инструментов, чем со снижением зарплаты 
                        Bu gönderi esclkm tarafından düzenlendi (2009-02-13 07:16, 16 yıllar önce)
                     
                    
				 | 
			
| kanda | 
					 | 
			
|---|---|
| 
					 Вот такая проблемка маленькая: внизу страницы(стандартный шаблон) есть кнопичько "Вверх". Дак вот там ссылка идет на блок с id=top("#top") и при нажатии он высылает на главную страницу... Дак какой хак ядра можно вставить что-бы перед "#top" выводилась ссылка текущей страницы?? То есть "<a href="{хак}#top"></a>". 
						P.s. извините если проглядел где... [h2][color=#3465A4][center][b]Верстаю сайт по фотографии![/b][/color](c)[/center][/h1] 
					 | 
			
| Ratibor | 
					 | 
			
|---|---|
					# kanda : Дак вот там ссылка идет на блок с id=top("#top") и при нажатии он высылает на главную страницу...Странно, у меня перекидывает именно в верх страницы. Может я делаю чтото не правильно ? ![]() Не задавай глупых вопросов, не услышишь вранья. 
					 | 
			
| Dayver | 
					 | 
			
|---|---|
					# kanda : Вот такая проблемка маленькая: внизу страницы(стандартный шаблон) есть кнопичько "Вверх". Дак вот там ссылка идет на блок с id=top("#top") и при нажатии он высылает на главную страницу... Дак какой хак ядра можно вставить что-бы перед "#top" выводилась ссылка текущей страницы?? То есть "<a href="{хак}#top"></a>".1. Какой броузер? 2. Это скорее не хак ядра а хак скина....а это вообще безболезнено Pavlo Tkachenko aka Dayver 
					 | 
			
| kanda | 
					 | 
			
|---|---|
| 
					 Ладно, ссылка вверх - решаема проблема и не так актуальная как "Динамические ключивики". 
						Возможно ли как-нибудь вывести теги страницы в keywords? Если тупо вставить тег для вывода "тегов", то это не айс )) [h2][color=#3465A4][center][b]Верстаю сайт по фотографии![/b][/color](c)[/center][/h1] 
					 | 
			
| medar | 
					 | 
			
|---|---|
| 
					 Та-дааа!! 
						Я, похоже, таки сделал логику для xtemplate. Тот путь, который я описал в постах выше оказался тупиковым, пришлось сделать все совсем по-другому. Файл пока не коммитю, так как даже обсуждения в Ideas не было. Хотя, ИМХО, обсуждать тут нечего, это мастхэв на 100% и дополнительных тормозов оно не создает. Вообще, когда я увидел ужас, летящий на крыльях ночи в xtemplate в виде массы регулярок и дублирования всех переменных движка, я уже спокойнее отношусь к вопросу "а не затормозит ли это движок?". Не затормозит. Если xtemplate не убил скорость, то точно уже ничего не убьет. :) Вот измененный файл: http://www.cotonti.com/datas/users/xtemplate.class_45.rar . Им надо переписать существующий (system/xtemplate.class.php). Посмотрите-потестите плиз, я погонял у себя, вроде работает везде и стабильно. Я завтра на свежую голову еще его погоняю и закоммитю. Использование. Итак, у нас в шаблонах стала доступна вот такая вот конструкция: <!-- IF <if_statement> --> этот текст будет показан если <if_statement> является true <!-- ENDIF --> <if_statement> - это логическое php-выражение, только вместо переменных используются tpl-тэги (в том числе и глобальные!) Примеры: <!-- IF {PHP.usr.profile.user_name} == "admin" -->
привет, админ !
<!-- ENDIF -->
<!-- IF {PAGE_DESC}== "" -->
Описание страницы пустое. Напишите хоть что-нибудь
<!-- ENDIF -->
<!-- IF {PAGE_DESC} == {PAGE_TITLE} AND {PAGE_COMMENTS_COUNT} > 0-->
Замечена нехилая активность в комментах! И, кстати, тайтл и деск страницы совпадают, если это вам интересно.
<!-- ENDIF -->
и даже можно так: Пример, конечно, надуманный, но больше в такой поздний час ничего в голову не лезет. <!-- IF strpos({PAGE_TITLE}, "жуй") -->
{PAGE_TITLE|str_replace('жуй', '', %s)} ц-ц-ц как нехорошо
<!-- ENDIF -->
<!-- IF !strpos({PAGE_TITLE}, "жуй") -->
{PAGE_TITLE}
<!-- ENDIF -->
"|str_replace" - это, кстати, фишка самого xtemplate - можно изменять значения тэгов callback-функциями. Вот как полезно, оказывается, читать документацию. :)Единственно чего нельзя - делать эти конструкции вложенными. Но так как в выражении можно использовать AND и OR, вложенность и не нужна по сути. rangjungyeshe.ru 
					 | 
			
| dervan | 
					 | 
			
|---|---|
					# medar : Вообще, когда я увидел ужас, летящий на крыльях ночи в xtemplate в виде массы регулярок и дублирования всех переменных движка, ...От дублирования $GLOBALS можно избавиться, поправив в XTemplate метод scan_globals(): 
	public function scan_globals ()
	{
		if ($this->force_globals && ini_get('auto_globals_jit') == true)
		{
			$tmp = $_SERVER;
			$tmp = $_ENV;
			$tmp = $_REQUEST;
			unset($tmp);
		}
		$this->vars['PHP'] =& $GLOBALS;
	}
 | 
			
| medar | 
					 | 
			
|---|---|
| 
					 Да, я тоже хотел сделать ссылкой, но меня насторожил код ниже: 
						case 'GLOBALS':
// Stop Recursion
break;Вроде со ссылкой на глаз все работает. Но print_r($this->vars); показывает вот что: Array
(
    [PHP] => Array
        (
            [GLOBALS] => Array
 *RECURSION*
rangjungyeshe.ru 
					 |