Вопросы по шаблонизации

ZigFreeD

Новичок
Вопросы по шаблонизации

Я хочу сделать в шаблоне некоторую гибкость, т.е. чтобы были заданы помимо строгих шаблонных переменных типа {LOGO}, некоторые универсальные... например такие
{FUNCTION=start} т.е. шаблонизатор должен выполнить функцию в пхп с этим названием...
или например {ADD=test.tpl} и он должен в это место вставить указанный темплейт... но как мне это сделать? чтобы не проверять весь текст на наличие этих значений? как сделать это просто и эллегантно? а не из Питера в Москву через Владивосток?
 

Vallar_ultra

Любитель выпить :)
Re: Вопросы по шаблонизации

Автор оригинала: ZigFreeD
Я хочу сделать в шаблоне некоторую гибкость, т.е. чтобы были заданы помимо строгих шаблонных переменных типа {LOGO}, некоторые универсальные... например такие
{FUNCTION=start} т.е. шаблонизатор должен выполнить функцию в пхп с этим названием...
или например {ADD=test.tpl} и он должен в это место вставить указанный темплейт... но как мне это сделать? чтобы не проверять весь текст на наличие этих значений? как сделать это просто и эллегантно? а не из Питера в Москву через Владивосток?
Ну вобщем для красоты во-первых при обработке шаблона (при том его конечных блоков) не всасывать их целиком а обходить по-строчно..... Это вот первое что в голову приходит. А какие действия на какое вхождение делать - это уже тебе решать.....

Для обработки {FUNCTION=start} можно сделать вот-так
PHP:
function GetTemplateName(){
	return "HalloWorld.tpl";
}

$stringRow = "<div>Это строка шаблона {FUNCTION=GetTemplateName}</div>";
if(preg_match_all("/{(\w[^}]*)=(\w[^}]*)}/",$stringRow,$res)){
	$actions = $res[1];
	$params  = $res[2];
	foreach ($actions as $i=>$action){
		switch (strtolower($action)) {
			case "function":{
				$result = $params[$i]();
				$stringRow = str_replace('{'.$action.'='.$params[$i].'}',$params[$i](),$stringRow);
			break;
			}
			case "add":{
				/*
				
				ну и далее по необходимости
				
				*/
			break;
			}
		}
	}
}
var_dump($stringRow);
 

Alexandre

PHPПенсионер
ZigFreeD ты сам что-ли шаблонизатор пишешь, или это уже теги готового шаблонизатора (тогда какого)?

Ну в первом случае, мы не знаем твоей реализации, по этому врядли поможем. Хотя как решение - используй шаблон "Слушателель".

Во втором мы тоже не ахти какие помошники, так как не знаем что за шаблонизатор ты собрался менять...
 

ZigFreeD

Новичок
Автор оригинала: Alexandre
ZigFreeD ты сам что-ли шаблонизатор пишешь, или это уже теги готового шаблонизатора (тогда какого)?

Ну в первом случае, мы не знаем твоей реализации, по этому врядли поможем. Хотя как решение - используй шаблон "Слушателель".

Во втором мы тоже не ахти какие помошники, так как не знаем что за шаблонизатор ты собрался менять...
А где его можно взять?

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

Vallar_ultra

Любитель выпить :)
2ZigFreeD
Это всего лишь первая мысль которая пришла мне в голову :))) А вообще есть два таких замечательных шаблонизатора как Smarty и xTPL.... Чем они тебя не устраивают????
 

ZigFreeD

Новичок
Автор оригинала: Vallar_ultra
2ZigFreeD
Это всего лишь первая мысль которая пришла мне в голову :))) А вообще есть два таких замечательных шаблонизатора как Smarty и xTPL.... Чем они тебя не устраивают????
во первых я не знаю где их откопать, а во-вторых не люблю чужие скрипты... в своем я больше уверен...
да и для решения моей задачи наврядли подойдут... хотя глянуть то можно... если бы знал где взять :(

лучше бы придумать способ как обрабатывать в своем шаблонизаторе...
если коротко то у меня есть одна переменная в которой хранится шаблон... вот как в ней найти эти строки? и обработать? не перебирая построчно...
 

Фанат

oncle terrible
Команда форума
{FUNCTION=start} т.е. шаблонизатор должен выполнить функцию в пхп с этим названием...
это неправильно.
функции пхп не должны ничего выводить в шаблон.
смысл шаблонизации теряется.

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

ZigFreeD

Новичок
нет блоки мне никчему... у меня другая задача... привязку к функциям я привел в качестве примера... мне нужны именно шаблоны.. просто иногда в некоторых "темах" я хотел бы иметь новые функции... т.е. я пропишу например {INCLUDE=...} чтобы он мне приинкладил пхп-шку вложенную в тему,а затем укажу какую функцию нужно выполнить! Т.к. все функции мне возможно выполнять не нужно... а например щас выполнить одну, а чуть позже другую!!! но мне это нужно ТОЛЬКО для определенной темы!!! т.е. блоки не подходят... да и нехочу я с ними заморачиваться... просто если я хочу чтобы на определенной теме чтото новое появилось, а сам код трогать не хочу то просто пропишу {INCLUDE=...} ну или чтонить вроде этого... там много применений я планирую сделать... опять же просто сканировать темы на наличие пхп я не хочу... займет лишнее время и лишняя нагрузка на сервер... нужно чтобы все было просто...
 

Vallar_ultra

Любитель выпить :)
2ZigFreeD
http://smarty.php.net/ - это smarty. Там кстати и help есть :)))
А вот я ещё НИ РАЗУ не встречал когда возможностей smarty не хватало-бы. Там ЕСТЬ ВСЁ ЧТО НУЖНО ТЕБЕ, и даже "кое что" ещё :))

а насчёт "в своем я больше уверен" - то я сильно сомневаюсь что ты в одиночку лучше контролишь код чем ЦЕЛАЯ КОММАНДА профессиональных разработчиков....
 

Alexandre

PHPПенсионер
А где его можно взять?
smarty.php.net

а во-вторых не люблю чужие скрипты... в своем я больше уверен...
Можно продолжить...
- не люблю чужие языки программирования, лучше самому свой сделать... в своем я больше уверен...
- не люблю чужие Операционные системы, лучше самому свою написать... в своей я больше уверен...

ZigFreeD Ты считаешь, что напишешь лучше, чем стая профессионалов, давно работающие и специализирующиеся в данной области?

PS см. подпись...
 

Фанат

oncle terrible
Команда форума
Ох уж эти кулибины...
Пару строковых функций выучить у них времени нет.
Но собственные системы, которые в сто раз круче - изобретают по три штуки на дню..
 

Vallar_ultra

Любитель выпить :)
2Alexandre
Иногда изобретать велосипед всё-таки приходиться(в целях целостности концепции), хотя это ЯВНО не тот случай..... :)
 

ZigFreeD

Новичок
Народ, а можно без не нужных комментариев? мне НЕ НУЖНЫ другие шаблонизаторы! у меня все зарезано под собственный шаблонизатор!!! мне нужно ТОЛЬКО эта функция, кто знает скажите как ее реализовать?
 

ilkz

Новичок
одна-две функции PCRE и функция call_user_func(). Больше тебе ничего не потребуется.
 

Фанат

oncle terrible
Команда форума
Я, пожалуй, был неправ. прошу прощения.
просто это же форум, а не служба поддержки. Нельзя от людей требовать, чтобы они отвечали только на поставленный вопрос.
 
Сверху