Посоветуйте шаблонизатор

Dreammaker

***=Ф=***
Почему не удачный? tipograf - это плагин смарти, который вызвает класс типографа, передает туда текст и получает совсем другой, с замененными кавычками, неразрывными пробелами и т.д.
А почему бы это всё не сделать, например, в контроллере перед передачей в View(s) ?
 

Nelius

кипарис во дворе
Автор оригинала: Dreammaker
А почему бы это всё не сделать, например, в контроллере перед передачей в View(s) ?
Ну у меня кстати так и делается щас, но я не знаю насколько это грамотно.

-~{}~ 10.09.08 00:30:

Alexandre
Огроменное спасибо за ссылку!) Чтиво очень занимательное!)
 

Духовность™

Продвинутый новичок
читать кашу из пхп и хтмл вперемешку удовольствия мало
Ещё раз - это НЕ КАША. Каша это вот:

PHP:
<HTML><BODY>
<h2>Последние новости:</h2>
<?
$f=fopen("news.txt","r");
for(my $i=1; !eof($f) && $i<=5; $i++) {
    print "<li>$i-я новость: ".fgets($f,1000);
}
?>
</BODY></HTML>
Если мы используем PHP в HTML, это не значит, что мы там делаем КАШУ. Никакой каши там нет. Есть логика представления, которая реализуется самим PHP, а не псевдоязыком типа Smarty.

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

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


Я постоянно привожу примеры одного и того же кода, элементарного кода, который реально встречается на практике. Задача черезвычайно простая:

Дан массив из двух элементов - имя пользователя и его тип. Тип - булев флаг. Если он в истине, то это - админ - его имя нужно представить в шаблоне красным цветом и болдом. Иначе - черным, стандартным. Задачу необходимо решить с помощью шаблонизатора, не используя HTML в PHP.

C помощью php-native это решается так:

PHP:
<?
// получили данные в скрипте 
$data = get_data();
?>

<!-- далее шаблон: -->
<? if($data['is_admin']): ?>
    <span style="color:red"><b><?=$data['username']?></b></span>
<? else: ?>
    <span><?=$data['username']?></span>
<? endif; ?>
5 строчек кода. Это - php-native.

Внимание, вопрос - как реализовать подобную шаблонизацию с помощью самописного шаблонизатора Nelius-а?
 

Nelius

кипарис во дворе
triumvirat
Ох, прям грозный пост! Читал с удовольствием)

Ну скажем так для Вас это не каша для меня это не каша, но для рядового верстальщика... Ладно забыли о верстальщиках.

У меня это реализовывалось очень просто:
<span class="{USER.role}">{USER.name}</span>

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

В целом вы правы. Я все больше склоняюсь к использованию native PHP в шаблонах =)

Вообще мне нравится как это дело реализовано в ZendFramework (Zend_View). Там отделение кода представления не зависит от выбранного шаблонизатора.

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

-~{}~ 10.09.08 03:12:

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

Духовность™

Продвинутый новичок
<span class="{USER.role}">{USER.name}</span>
и не только у тебя, подобное решение и другие раньше советовали.

Это разве _упрощает_ работу верстальщика? А если ему нужно имя класса поменять? А ещё надо предусмотреть, что при клике на админа надо вызвать javascript событие. Например (это все реальные ситуации).

Кстати, в примере, в постановке задачи, текст надо ещё тегами <b> выделить - прошу примеры :)

-~{}~ 10.09.08 09:05:

для меня это не каша, но для рядового верстальщика
не надо носиться с верстальщиком как с девочкой, которая, ах бедная, вынуждена if-else писать. Нормальный верстальщик должен знать _язык программирования_ JavaScript, хотя бы на минимальном уровне. Без этого никуда. Если верстальщик не знает примитивных структур управления, и не хочет учиться - гнать его в шею.

далее, насчет "КАШИ". Каша получается именно тогда, когда люди начинают писать собственные шаблонизаторы. Я сотни раз видел решения, которые люди писали ради того, что бы "не писать PHP в HTML". В итоге у них получался неповоротливый, абсолютно не гибкий псевдо-язык.

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

PHP:
<title>{$title}</title>
от

PHP:
<title><?=$title?></title>
чем отличается

PHP:
{include file=$includeFile}
от

PHP:
<? include($includeFile)?>
чем отличается

PHP:
{$articleTitle|nl2br}
от

PHP:
<?=$format->($articleTitle, 'nl2br')?>
чем отличается

PHP:
{if $name eq 'Fred'}
	Welcome Sir.
{elseif $name eq 'Wilma'}
    Welcome Ma'am.
{else}
    Welcome, whatever you are.
{/if}
от

PHP:
<? if ($name == 'Fred'): ?>
	Welcome Sir.
<? elseif ($name == 'Wilma): ?>
    Welcome Ma'am.
<? else: ?>
    Welcome, whatever you are.
<? endif; ?>
и т.д. продолжать можно до конца мануала по смарти.
 

Ирокез

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

{widget type=report on_fetch_rows=Controller_CallbackFunction полосатый_спиок=да и т.д.}
{column id=id caption="Иде"}
{column id=name caption="Имя"}
и т.д.
{/widget}

смысл думаю понятен. В итоге и верстальщик не в обиде и алгоритм вывода остается скрыт от него-же. Да возможно, для верстальщика сначало и будет затруднительно вставлять не хтмл тэги. но уж точно не знакомым с php будет проще выучить.

Эт мое решение, возможно кому и пригодится или натолкнет на мысль.

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

Nelius

кипарис во дворе
triumvirat
Да, я согласен с Вашими доводами. Спасибо, буду юзать native-шаблоны, потому что в данном случае упрощение синтаксиса (как видно из Вашего примера незначительное) несопоставимо с затратами и потерями в производительности.
 

Angerslave

Новичок
triumvirat
Да тем же, чем и
Код:
<?php
if ($a == true) {
  $a = false;
}
elseif ($a == false) {
  $a = true;
}
от
Код:
<?php
$a = !$a;
Вроде одно и то же, а второе глазу приятнее. Принципиально смарти-шаблоны от пхп просто не могут отличаться, ведь первое переводится во второе. Просто во втором немного больше лишних служебных, отвлекающих символов.
 

Фанат

oncle terrible
Команда форума
triumvirat, очень по ушам бьёт

-~{}~ 10.09.08 13:37:

вот не зря красный значок показывается у темы. Это значит, что кто-то прибежал и разорался.
причем сути не понимает ни один. только бы кричать погромче.
 

fixxxer

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

Nelius

кипарис во дворе
Ну уважаемый fixxxer научите меня писать не говнокод пожалуйста!) Вернее дайте пинка в нужно направлении, а дальше я сам научусь!
Если у Вас есть что добавить по теме, то я с удовольствием выслушаю и "заточу свой топор"... =)

Я думаю что если была бы хоть одна тема с конкретикой, то новых таких тем бы не создавалось.
Четко и ясно:
Натив ПХП нужною юзать потому что... не нужно юзать потому что...
Смарти нужно юзать потому что... ненужно юзать потому что...

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

fixxxer

К.О.
Партнер клуба
так потому что нет никакой разницы, какой template engine :)
вопрос в разделении бизнес-логики, логики отображения и html кода :)
 

Nelius

кипарис во дворе
fixxxer
Ну так это есть... :) Вопрос стоял во что это завернуть! :)
 

HraKK

Мудак
Команда форума
*молюсь чтоб не забежал сюда кто-то умный и не ляпнул про active template
З.Ы. миниатюрная сценка:
Еще один пациент насмотрелся на Рому и решил проявить себя во всей красе, причем по любимой теме Ромы.
 

Nelius

кипарис во дворе
HraKK
Простите, мне так, для понимания, ху из Рома?)
 

HraKK

Мудак
Команда форума
Nelius
Сие есть тайна великая. Специально для разгадки ее построили БАК. Как заявляют ученые - первые результаты огласят не раньше 2010 года, так что ждем-с.
 

Nelius

кипарис во дворе
HraKK главное чтобы Большой Огромный Мармелайдр не дал ответ на вопрос "как исчезают цивилизации" в общем ладно Рома или не Рома к шаблонам особо не относится :)
 
Сверху