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

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

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

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 176
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Про Шаблонизаторы
« : 29 Ноября 2004, 13:07:31 »
Никто не скажет, чем нужно руководствоваться при написании своего шаблонизатора?

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

Может кто пытался делать нечто похожее? Очень не хочется использовать существующие классы, хочется что-нить самому написать.

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

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Про Шаблонизаторы
« Ответ #1 : 29 Ноября 2004, 13:34:15 »
Руководствоваться надо пониманием принципов шаблонов и собственных потребностей.
Какой смысл вообще делать что-либо - ставить чай на плиту или писать шаблонизатор, если ты не знаешь - зачем оно тебе нужно?


ты в свой вопрос вдумайся.
"Я хочу написать шаблонизатор, но не знаю, зачем он нужен".
Так не делают.
Ты или спроси - зачем нужны шаблонизаторы, или спрашивай "хочу от шаблонизатора таких-то функций - как лучше сделать"
Лично я руководствуюсь разделением логики приложения от логики представления.
Наиболее полно моим потребностям в шаблонах соответствует подход, изложенный в статье http://spectator.ru/technology/php/easy_templates
« Последнее редактирование: 29 Ноября 2004, 13:46:50 от RomikChef »

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

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 176
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Про Шаблонизаторы
« Ответ #2 : 29 Ноября 2004, 14:09:24 »
RomikChef
Да, читал статью, во многом согласен. Но всётаки это не то.
Я делал с подобным кодом ресурс, получается имхо не очень.

Ну вот пример:


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


<strong>Комментарий:</strong> <?=$DHTML["user_message"][$i]?>

<small class="color_4"><?=$weekday[$DHTML["weekday"][$i]].", ".$DHTML["day"][$i]." ".$months[$DHTML["month"][$i]]." ".$DHTML["year"][$i].", ".$DHTML["time"][$i]?></small><hr />

<?
	
endfor;
	
?>


<div><strong>Страницы:</strong> 
<?
	
for(
$i=1$i<=$fornum[1]; $i++):
	
	
if(
$_GET["page"]==$i):
	
?><strong><?=$i?></strong><?
	
	
else :
?>
	
	
<a href="./<?=$i?>.html" class="bold color_1"><?=$i?></a>
<?
	
	
endif;
	
endfor;
?>


Ну как то всё это не очен.... В последнем цикле уж очень сильно представлено программирование. Плюс необходимость таскать массив $fornum, который содержит пределы для циклов... ну... не нравитца всё это..

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
Про Шаблонизаторы
« Ответ #3 : 29 Ноября 2004, 14:55:48 »
Цитировать
Алексей:
В последнем цикле уж очень сильно представлено программирование.

а кто тебе мешал сгенерировать HTML блок ссылок непосредственно в скрипте, а в шаблоне этот блок выводить уже как

Какой бы хороший шаблонизатор ни был, он все равно будет вводить некоторые ограничения.
 в исканиях.

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

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Про Шаблонизаторы
« Ответ #4 : 29 Ноября 2004, 15:00:30 »
Кошмар!ты никогда не слышал об операторе foreach?
$weekday[$DHTML["weekday"][$i]] - ЧТО так трудно было викдэй положить в массив дхтмл?! чтобы вывод был единнобразным?
извини, но это твои личные косяки, а не подхода в целом.
всё это прекрасно причёывается, и выглядит, как

или, при использовании extract -

что не сложнее, чем
{USER_ID}

А со вторым циклом мне ОЧЕНЬ ИНТЕРЕСНО, как оно будет выглядеть в шаблоне, да.

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

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

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

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Про Шаблонизаторы
« Ответ #6 : 29 Ноября 2004, 15:05:59 »
Алексей по-моему, ты путаешь шаблоны с телепатией.
и находишься в плену весьма распространённого заблуждения о том, что можно в принципе разделить оформление и логику.

можно.
но кривизна будет немеряная.

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
Про Шаблонизаторы
« Ответ #7 : 29 Ноября 2004, 15:30:13 »
Цитировать
RomikChef:
Green Kakadu
нет, хтмл блок в скрипте - это плохо.
это смысл шаблонов теряется

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

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

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

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Про Шаблонизаторы
« Ответ #8 : 29 Ноября 2004, 15:41:46 »
Green Kakadu
ух, ё.
прошу прощения, я сильно тормознул.
я подумал про первый блок, а речь - о втором.
Сермяжная правда этой жизни состоит в том, что именно как раз список страниц для навигации я сам как раз и формирую отдельным куском в скрипте.
И решения этой проблемы я не знаю.
И это меня напрягает.
« Последнее редактирование: 29 Ноября 2004, 16:05:26 от RomikChef »

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Про Шаблонизаторы
« Ответ #9 : 29 Ноября 2004, 15:52:48 »
Алексей
перед тем, как писать свой шаблонизатор, неплохо бы поизучать имеющиеся популярные решения (Smarty, pear::html::template::*, php-templates и т.д.).
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

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

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 176
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Про Шаблонизаторы
« Ответ #10 : 29 Ноября 2004, 17:50:26 »
Цитировать
RomikChef:
и находишься в плену весьма распространённого заблуждения о том, что можно в принципе разделить оформление и логику.

можно.
но кривизна будет немеряная.

возможно нахожусь.... а насчёт кривизны - но ведь как-то добиваются разработчики некривых решений!..


Цитировать
RomikChef:
Сермяжная правда этой жизни состоит в том, что именно как раз список страниц для навигации я сам как раз и формирую отдельным куском в скрипте.
И решения этой проблемы я не знаю.

т.е. хтмл в коде? так понимать?

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

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Про Шаблонизаторы
« Ответ #11 : 29 Ноября 2004, 18:21:04 »
Цитировать
Алексей:
но ведь как-то добиваются разработчики некривых решений!..

ПОКАЖЬ!!!
По гроб благодарен буду.
Лично мне пока некривого решения неизвестно.
Цитировать
Алексей:
т.е. хтмл в коде? так понимать?

Увы, да.
Впрочем, никто не мешает тебе поместить наоборот - код в хтмл, как сделано у тебя :-)
правда, опять же - почище.
<div><strong>Страницы:</strong
<? foreach(
$pages as $i): ?>
<? 
if($cirrent_page==$i): ?>
<strong><?=$i?></strong>
<? else :?> 
<a href="<?=$i?>.html" class="bold color_1"><?=$i?></a> 
<? endif ?>
<?
endforeach ?>

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

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Про Шаблонизаторы
« Ответ #12 : 29 Ноября 2004, 18:50:32 »
а вот тебе пример на чистых шаблонах:
{{TEMPLATE:PagesList_Item}}
{{?_Current}} {{_PageNo}}
{{?!_Current}} {{_PageNo}}
{{?/_Current}}
|
{{/TEMPLATE:PagesList_Item}}

оно тбе надо?

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

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 176
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Про Шаблонизаторы
« Ответ #13 : 29 Ноября 2004, 20:54:09 »
RomikChef
блин, сколько раз я поднимаю эту темы (или подобные им), ты всегда меня начинаешь переубеждать. И в принципе, тебе это удаётся.
Только вот ответь на вопрос - почему же практически во всех веб-мастерских используются шаблонизаторы?

Оффлайн CGVictor

  • теперь местный
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2511
  • +0/-0
  • 2
    • Просмотр профиля
    • http://cg.net.ru
Про Шаблонизаторы
« Ответ #14 : 29 Ноября 2004, 21:13:58 »
[off]
Цитировать
RomikChef:
По гроб благодарен буду.
Лично мне пока некривого решения неизвестно.

Я от своего шаблонизатора (KTempalte + доработка напильником) добился всего, чего хочется... Может, и над твоим решением поразмыслить всей толпой?

Цитировать
Алексей:
почему же практически во всех веб-мастерских используются шаблонизаторы?

Там,заметь, не просто шаблонизаторы, а движок+CMS+шаблонизатор. Даже если по отдельности каждый элемент г..., то связка иногда получается вполне функциональна[/off]
LJ: Backslashed life (rss)

 

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