Автор Тема: Про Шаблонизаторы  (Прочитано 19564 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Про Шаблонизаторы
« Ответ #30 : 30 Ноября 2004, 14:37:17 »
CGVictor
запомни.
шаблоны придуманы не для верстальщиков-идиотов.
шаблоны придуманы для того, чтобы можно было сделать страницу для печати НЕ ТРОГАЯ код скрипта.

Медитируй над этой истиной, пока она до тебя не дойдёт.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Про Шаблонизаторы
« Ответ #31 : 30 Ноября 2004, 14:45:23 »
Цитировать
Green Kakadu:
шаблон это НЕ программа.

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

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

Цитировать
RomikChef:
Таким образом, использование шаблонизатора это не способ разделить логику и дизайн, а возможность вынести логику представления за пределы кода скрипта, и дать другим воз-ть менять эту логику.

правильно, только концовка от балды.
Цитировать
RomikChef:
особо не вдаваясь в детали того как это реализуется.

Как реализуется что?
на самом деле, шаблон - это возможность менять логику представления не вдаваясь в детали получения данных для этого шаблона. Т.е - в логику ПРИЛОЖЕНИЯ.

Оффлайн CGVictor

  • теперь местный
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2511
  • +0/-0
  • 2
    • Просмотр профиля
    • http://cg.net.ru
Про Шаблонизаторы
« Ответ #32 : 30 Ноября 2004, 15:17:10 »
Цитировать
RomikChef:
чтобы можно было сделать страницу для печати НЕ ТРОГАЯ код скрипта

Вполне доступно. [off]Собственно, мое решение позволяет это делать.[/off] И эта истина мне понятна.
Те, кто хочеть влезть на елку и, простите, не ободрать задницу - придуман XML (и XSLT для него), милости прошу.
Или компромиссы. Но это - дело интимное.
LJ: Backslashed life (rss)

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Про Шаблонизаторы
« Ответ #33 : 30 Ноября 2004, 15:20:25 »
Цитировать
CGVictor:
Собственно, мое решение позволяет это делать

собственно, ЛЮБОЙ шаблонный движок позволяет это сделать.
Другое дело - я не понимаю, зачем наживать себе геморрой, изобретая этот самый движок,если с задачей прекрасно справляется и сам пхп.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Про Шаблонизаторы
« Ответ #34 : 30 Ноября 2004, 16:47:41 »
Макс, Сергей, вы не хотите высказаться? Жалко...

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Про Шаблонизаторы
« Ответ #35 : 30 Ноября 2004, 17:22:59 »
Алексей
Если подвести итог
Вот, что мы имеем на пхп:

<? foreach($data as $row): ?> 
<span onclick="insert(\'gb\',\'user_message\',\'[user <?=$row["user_id"]?>]\')" onmousemove="show_Explanatory(\'explanatory_fly\', paste_name)" class="div_help hand">^</span>
<strong>Имя:</strong>
<a href="/users/<?=$row["user_id"]?>.html" onclick="infoWindow(this.href); return false;"><?=$row["user_name"]?></a> 

 
<strong>Комментарий:</strong> <?=$row["user_message"]?>
 
<small class="color_4"><?=$row["date"]?></small><hr /> 
<? endforeach ?> 
<div><strong>Страницы:</strong> 
<? foreach($pages as $i): ?> 
  <? if($current_page==$i): ?> 
<strong><?=$i?></strong> 
  <? else: ?> 
<a href="<?=$i?>.html" class="bold color_1"><?=$i?></a> 
  <? endif ?> 
<? endforeach ?>


Прежде, чем браться за темплейтный движок, подумай: а чем код на этом движке будет лучше, чем тот, который ты видишь здесь.
« Последнее редактирование: 30 Ноября 2004, 17:28:27 от RomikChef »

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Про Шаблонизаторы
« Ответ #36 : 30 Ноября 2004, 21:48:59 »
Цитировать
RomikChef:
Макс, Сергей, вы не хотите высказаться? Жалко...

Ну что вам написать ?

Я довольно долго использовал и шаблонизатор и чистый ПХП, сейчас изучаю XSLT.

ИМХО,
все 3 способа вполне примелемы и отличаются лишь мелочами, которые для кого-то
имеет значение, а для кого-то нет.

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

<!-- some template -->
<
b><?=$name;?></b>


то в нем не должны быть доступны переменным типа $db_login (логин доступа к БД).
В ПХП отделить пространство имен можно лишь двумя способами : помещение кода в  функцию или класс (обычный include не подойдет).

Далее, мне при отладке удобно, что в шаблоне нет ПХП-кода.
Любые ПХП-ошибки (warning-и, notice-ы) надо искать именно в коде, а не в шаблоне.
Когда используешь шаблонизаторы, то любые ПХП-ошибки в броузер аккуратно выводятся сверху, а потом идет ХТМЛ-код (дизайн).

Но и классически шаблонизаторы меня не устраивают.
Причина,  код скрипта кишит всякими :

      $tpl
->addBlockFile(\'content\', \'cb\', \'tth_list.html\');
      if ($amount) {
         $tpl->setCurrentBlock(\'row\');
         while($list->isValid()) {
            $thread= & $list->get();
            $tpl->setVariable(array(
               \'thread_id\' => $thread->id, 
               \'message\' => $thread->getMessage(), 
               \'subject\' => $thread->getSubject(), 
            ));
            $tpl->parseCurrentBlock();
            $list->next();
         }
      } else {
         $tpl->touchBlock(\'no_row\');
      }

$tpl - это объект шаблонизатора.

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

Поэтому я склоняюсь к использовнию шаблонизаторов, у которых шаблон имеет логику.
Выбор тут невелик - Smarty/XSLT/чистый PHP (Я склоняюсь к XSLT)

Противники таких шаблонов говорят что в шаблоне не должно быть никакой логики,
что они должны быть как можно более простыми.
1. Начнем с логики.
Логику в приложении можно разделить на 2 части: бизнес-логика (логика обработки данных) и логика представления (логика дизайна).
Так вот, верстальщик ДОЛЖЕН знать о логике представления. И он должен уметь управлять логикой представления.
Все что касается внешнего представления можно доверить верстальщику.
2. По поводу простоты шаблона.
Верстальщик должен быть таким же профи как и программист, только профи в своей области, в верстке.
Иначе пусть ищет другую работу.

Свое мнение не навязываю и не обсуждаю, хотя если есть вопросы - отвечу.
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Про Шаблонизаторы
« Ответ #37 : 30 Ноября 2004, 21:54:09 »
Цитировать
Макс:
 Поэтому я склоняюсь к использовнию шаблонизаторов, у которых шаблон имеет логику.

Грубо говоря одна из целей этого решения - упростить свою работу и усложнить жизнь верстальщику :D
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Про Шаблонизаторы
« Ответ #38 : 30 Ноября 2004, 22:07:25 »
На самом деле, многие шутку не поймут.
На самом деле, такой подход развязывает руки верстальщику.
и он не должен бегать за каждым чихом к програмеру.
он имеет набдор данных, оговоренный в ТЗ и располагает так, как ему заблагорассудится

А убить доступ к переменным есть еще один способ - unset :-)
кроме шуток
foreach ($GLOBALS) убиваем все, что не $form_data

Оффлайн Алексей

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 176
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Про Шаблонизаторы
« Ответ #39 : 01 Декабря 2004, 10:03:11 »
RomikChef
мдя... твои аргументы наповал убивают. Соглашусь со всем тобой сказанным, в т.ч. и с идеей, что с функциями шаблонизатора вполне справляется код на пхп, приведённый тобой.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Про Шаблонизаторы
« Ответ #40 : 01 Декабря 2004, 12:21:23 »
Алексей
я так понял, что тут вопрос самодисциплины.
Но мне кажется, что соблюдать несложные правила синтаксиса, и в массив с данными помещать уже окончательно подготовленные данные - нет проблем.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28