Опять об шаблоны

john.brown

просто кулибин
Да, ссылочка SiMM'а неплохая, и для общего понимания, как оно отделяется, полезна. Но вот с идеологической установкой автора, что самый лучший язык шаблонов - это пхп, советовал бы неувлекаться.
Поясню почему. Сам долгое время пользовал пхп, как шаблонный язык. Но потом понял, что происходит следующее - с начала мы говорим "ну что же плохого включить в шаблон условия". И включаем их. Вроде так просто и понятно:
PHP:
<? if ($text==""): ?>
Текста нет, пусто.
<? else: ?>
Введеный текст: <b><?=$text;?></b>
<? endif; ?>
Потом обнаруживаем, что кое что надо выводить в цикле, и делаем одно из двух - или дробим шаблон на подшаблоны, и инклудим их в цикле, или уже пишем цикл в самом шаблоне. Вроде тоже ничего страшного, и дизайнеру как то втюхаем, что такое цикл, и с чем его едят :)
А дальше - больше. Еще находится масса вещей, которые, как нам кажется, круто делать в шаблоне - всякие каллбэки, вычисления и.т.д. И незаметно шаблоны начинают напоминать пуре пхтмл, токмо в извращенной форме. И тут встаем в тупик - учить дизайнера пхп, или самим писать шаблоны...
В результате я пришел к выводу, что шаблонный движек нужен. И конечно, это не должен быть смарти, или что то подобное, ибо пхп на пхп не есть гуд. Имхо, шаблонный движек должен уметь две вещи - распознавать и показывать блоки шаблона, и подменять переменные шаблона. Вся логика (условия, циклы, и.т.д.) должна находится в view. Да, это делает вид несколько тяжеловесным, но все это сопровождать становится намного проще и удобнее.

П.С. может, несколько не к месту все это написал, но что то задела ссылочка за живое ;)
 

zerkms

TDD infected
Команда форума
шаблоны совсем без условных конструкций - будут выглядеть куда более ущербно, чем с оными.
в качестве доказательства предлагаю попробовать реализовать вывод картинок в 2 колонки.
 

john.brown

просто кулибин
zerkms
Не совсем понял твою мысл. В чем проблема вывести картинки в скоко угодно колонок без условных конструкций в шаблоне? Уже, наверно, года два не пользуюсь никакой логикой в шаблонах, и ни разу не почувствовал нужду в них :) Вся логика переехала в вид.

Не картинки, но в две колонки:
Код:
<table border="1">
<!--{TR{-->
	<tr>
	<!--{Cell{-->
		<td>{$content}</td>
	<!--}Cell}-->
	<!--{EmptyCell{-->
		<td>&nbsp;</td>
	<!--}EmptyCell}-->
	</tr>
<!--}TR}-->
</table>
PHP:
require_once('Templus.php');
$data = array('content1', 'content2', 'content3', 'content4', 'content5');
$cols = 2;

$tpl = new core_utils_Templus();
$tpl->loadFromFile('tpl.html');

$i = 0;
foreach($data as $d) {
	$tpl->Child('TR')->Child('Cell')->Evaluate(array('content' => $d));
	$i++;
	if($i == $cols) {
		$tpl->Child('TR')->Evaluate();
		$i = 0;
	}
}
if($i != 0) {
	for($i; $i < $cols; $i++) {
		$tpl->Child('TR')->Child('EmptyCell')->Evaluate();
	}
	$tpl->Child('TR')->Evaluate();
}
$tpl->printEvaluate();
 

zerkms

TDD infected
Команда форума
итого - страница кода, в котором я, например, сразу разобраться не могу, для вывода контента в 2 колонки. торжество разделения логики отображения и шаблона :)
 

john.brown

просто кулибин
zerkms
На самом деле разобраться проще, чем в пуре пхтмл шаблоне :) Поверь, все крайне просто, просто непрывычно. Так как я ранше пользовал пхп шаблоны, то могу сравнивать - шаз уже не приходиться втыкать, что же там пуре напхтмлил ;)
 

HraKK

Мудак
Команда форума
john.brown
ты не прав. У тебя концепция еще хуже чем html в php в чистом виде. Подумай.
 

john.brown

просто кулибин
HraKK
Так я и не претендую на абсолютную правоту. Выше сказал, что это иое имхо. Но к пхп в шаблонах уже не вернусь. Как говорится, кто раз вкусил... :)
{}
Ну, ну, чем же она хуже?
 

Dreammaker

***=Ф=***
холивор детектед... :)


>Но к пхп в шаблонах уже не вернусь.

Никто не заставляет совать пхп в шаблон, а вот в реальном сложном веб-приложении используется логика отображения, а просто "шаблон".
 

Фанат

oncle terrible
Команда форума
john.brown, ты опоздал.
тема обсуждалась сто раз.

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

Первое, что тебе надо понять. изначально идея шаблона у тебя была идиотская. Использовать пхп только для вывода переменных - это самая оригинальная идея, которую я встречал при обсуждении шаблонов, а наобсуждал я их немало. Ты единственный, кому это в голову пришло. Называть словом "шаблонный язык" единственную конструкцию <?=$text;?> - перебор.

Второе. Что тебе надо понять. ПХП шаблон используют те, кто ТАК И СЧИТАЕТ - что в шаблоне должны быть и циклы, и условные переходы. Это неотрывное свойство пхп-шаблона. Он для того и придуман. Для циклов и условных переходов.

Третье. Тем путем, которым пошел ты, идут обычно создатели "движков": сначала они думают, что им достаточно будет {TEXT}, потом понимают, что нужны условные переходы, а потом - циклы. И придумали блоки

Четвертое. Сложное для понимания. Но ты уж постарайся.
Твое <!--{TR{--> - это цикл. Только неявный цикл.
А <!--{Cell{--> - условный переход. Неявный.
При этом по имени блока нельзя однозначно судить - цикл это, или условный переход. Получается ситуация, в которой
1. На деле пишется два шаблона: сам шаблон и его пхп обработчик. Не трогая второе нельзя поменять первое.
2. Над шаблоном работают два человека (иногда в одном лице)
3. Этим двум людям нужно работать в постоянном контакте - от программиста к верстальщику должна идти информация, что означают все эти EmptyCell, а от верстальщика к программисту - просьбы тем или иным образом изменить программу.

Такой способ имеет право на жизнь. И ни одна из парадигм (активный шаблон или пассивный) пока не победила. (Хотя стандартом становится именно активный XSLT). И я тебя не уговариваю за пхп в шаблоне. Я просто хочу объяснить, что ты исходил из неверных посылок и пришел к неверным выводам.

-~{}~ 23.03.09 13:06:

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

Но в этой привлекательной скрыта непривлекательная. Вместо десятка строго определенных операторов мы имеем два десятка случайных.

Оператор foreach заменяется оператором {{ с именем TR.
С одной стороны, это удобно - одним и тем же оператором мы можем сделать хоть условный переход, хоть цикл, хоть рекурсию, хоть htmlspecialchars к заключенному в нем коду применить.
С другой, именно эта неопределенность - когда мы не знаем, и не можем знать, что, собственно, делает тот или иной блок - огорчает.

В других терминах про активные и пассивные шаблоны можно сказать, что активный шаблон направлен на разделение ответственности между программистом и верстальщиком, а пассивный - на объединение.

-~{}~ 23.03.09 13:07:

а в блице есть условный переход, и поэтому с точки зрения блочных шаблонов является некошерным :-Р
 

john.brown

просто кулибин
Да, к сожалению, как отдельная тема это чистейшей воды холивар. Уже жалею, что поддался сиюминутному импульсу, и написал это :)

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

Закрой, плз, тему, ибо холивара не хочу.
 

pilot911

Новичок
Автор оригинала: *****
НЕТУ. НИКАКОГО. ДИЗАЙНЕРА.
Бывает верстальщик. А дизайнера с нашими файлами рядом никогда никакого не стояло.
а разрыва связи не было, случайно ?
 

john.brown

просто кулибин
Блин, ну ты как то черезмерно категоричен. У тебя верстальщик, а у меня дизайнер и верстальшик в одном флаконе.
Повторю, если незаметил:
это токмо мое имхо, основанное на моем опыте
И спорить о нем не надо.
 

Духовность™

Продвинутый новичок
НЕТУ. НИКАКОГО. ДИЗАЙНЕРА.
Бывает верстальщик.
+1
у нас верстальщик верстает, а натягивает программист. и консультирует программист если что-то не понятно верстальщику.

<table border="1"> <!--{TR{--> <tr> <!--{Cell{--> <td>{$content}</td> <!--}Cell}--> <!--{EmptyCell{--> <td> </td> <!--}EmptyCell}--> </tr> <!--}TR}--> </table>
это АД, а не шаблонная система. Ситаксис не похож ни на один язык программирования, следовательно ни умный программист, ни глупый "дизайнер"/верстальщик от этого в восторге не будет.
 

john.brown

просто кулибин
triumvirat
Как он может быть похож на какой то "язык программирования" если там нету никакого программирования? Там есть токмо две вещи - маркеры блоков:
Код:
<!--{Blabla{--> <!--}Blabla}-->
и переменная:
Код:
{$bla}
И не надо там искать ничего более, забивать голову всякими "скрытыми цыклами" и "скрытыми условными переходами". Это уже горе от ума. Все программирование делается на чистом пхп в отдельном файле - там и думай об этом.
 

findnext

Новичок
require_once('Templus.php');
$data = array('content1', 'content2', 'content3', 'content4', 'content5');
$cols = 2;

$tpl = new core_utils_Templus();
$tpl->loadFromFile('tpl.html');

$i = 0;
foreach($data as $d) {
$tpl->Child('TR')->Child('Cell')->Evaluate(array('content' => $d));
$i++;
if($i == $cols) {
$tpl->Child('TR')->Evaluate();
$i = 0;
}
}
if($i != 0) {
for($i; $i < $cols; $i++) {
$tpl->Child('TR')->Child('EmptyCell')->Evaluate();
}
$tpl->Child('TR')->Evaluate();
}
$tpl->printEvaluate();
жесть

-~{}~ 23.03.09 14:43:

поиск волшебного ключика именно и приводит к такому коду...тут не то что верстальщик - программисту будет трудно разобраться...
 

Фанат

oncle terrible
Команда форума
Если у тебя дизайнер и верстальщик в одном флаконе, то надо говорить "верстальщик". Потому что дизайнер работает не с html, а с PSD. Потому что для верстки и для дизайна нужны совершенно разные мозги.

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

Все программирование делается на чистом пхп
верстальщик не может делать шаблон, не зная, как будет выглядеть конечная страница. То есть, в голове у него все равно должна быть таблица абстракций: "блок ТР будет повторяться много раз, а блок емпти - если данных нету." Он, ля, должен это знать. потому что в емпти может быть картинка, текст или другой стиль.

-~{}~ 23.03.09 15:04:

triumvirat
это АД, а не шаблонная система.
Вот это - образец холивара.

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

Правильно вас фишер пинал. Толпа пионеров, видящих мир в черно-белом цвете.
 

Духовность™

Продвинутый новичок
*****
А кто скзал, что отметившиеся тут сделали меньше проектов чем john.brown?

Я не собирался разводить холивор. Я таким своеобразным образом лишь высказал свое мнение. Переведу на человеческий язык его: я считаю, что PHP сам по себе является очень хорошим шаблонизатором при правильном использовании оного. Я никогда не испытывал трудностей и проблем с PHP в области шаблонизации за 5 лет стажа в области IT и разработок. Верстальщики, сидящие рядом, знают PHP на начальном уровне и способны адекватно использовать PHP в HTML. Ситаксис шаблонизатора john.brown показался мне интуитивно не понятным, лишним слоем в приложении, которое по моему мнению может вызвать трудности понимания работы системы у сторонних программистов и верстальщиков.

За сим удаляюсь.
 

Фанат

oncle terrible
Команда форума
Хех, про человека - это я не джонбрауна имел в виду.
А про холивар - я понимаю, что ты не собирался разводить его. У тебя аргументация холиварная. Вот сейчас ты привел нормальную, хотя и очень слабую.
Синтаксис шаблонизатора john.brown - это синтаксис сотен шаблонизаторов.

Почему ты видишь в нем только отрицательные стороны и не хочешь видеть положительные? Ведь идеально черных или идеально белых вещей не бывает. У каждой вещи есть достоинства и недостатки. И выбор всегда - это не выбор между ужасной и прекрасной, а к о м п р о м и с с. Выбор устраивающего лично тебя набора сочетания достоинств и недостатков.
 

nalim

Новичок
Автор оригинала: john.brown
zerkms

Не картинки, но в две колонки:
Код:
<table border="1">
<!--{TR{-->
	<tr>
	<!--{Cell{-->
		<td>{$content}</td>
	<!--}Cell}-->
	<!--{EmptyCell{-->
		<td>&nbsp;</td>
	<!--}EmptyCell}-->
	</tr>
<!--}TR}-->
</table>
PHP:
require_once('Templus.php');
$data = array('content1', 'content2', 'content3', 'content4', 'content5');
$cols = 2;

$tpl = new core_utils_Templus();
$tpl->loadFromFile('tpl.html');

$i = 0;
foreach($data as $d) {
имхо за это убивать надо =)
Всем врагам пожелать успешного рефакторинга подобного кода)

аргумент против:
все что делает код это вывод данных, однако верстальщик
с одной стороны не может полностью настроить вывод в tpl.html (например изменить количество колонок, или вообще отказаться от них, а ведь это всего лишь отображение данных),
с другой стороны должен все таки напрягаться чтобы его понять.
То есть мы размазали вывод на 2 файла, и заставили верстальщика выучить PHP,
после чего он стал программистом и ушел отказавшись верстать =)
Мне кажется намного гуманее всетаки научить верстальщика смарти =)
 
Сверху