Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > [Шаблонизаторы] изнутри и снаружи


Автор: CyClon 15.5.2007, 20:22
Юзал поиск, очень много тем про шаблонизаторы, много чего обсуждалась... Но все не то что мне нужно...

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

Созрели вопрос:
1. Классом или функциями писать? (Вопрос хоть и глупый, но все же, может найдутся сторонники второго варианта)
2. Какими должны быть сами шаблоны в идеале? Я хотел сделать вообще всего лишь один файл, например index.tpl в котором бы был весь код выдаваемой страницы, только места где нужно что-то вставить были заполнены спец-тегами типа {TITLE}, {PAGE} и т.д. Все вроде бы просто, но тут встает вопрос: как быть с блоками? Не стал сильно напрягаться и пока что сделал так:

Код
/templates/default/basic.css
/templates/default/blocks-left.tpl
/templates/default/blocks-right.tpl
/templates/default/body.tpl
/templates/default/foot.tpl
/templates/default/head.tpl
/templates/default/index.tpl


Файл index.tpl имеет содержание:

Код
<?xml version="1.0" encoding="{CONFIG:CHARSET}" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{CONFIG:LANGUAGE}" lang="{CONFIG:LANGUAGE}">
<head>
<meta http-equiv="Content-Type" content="text/html; charset={CONFIG:CHARSET}" />
<meta name="generator" content="{CONFIG:GENERATOR}" />
<meta name="keywords" content="{CONFIG:KEYWORDS}" />
<meta name="description" content="{CONFIG:DESCRIPTION}" />
<title>{PAGE:TITLE}</title>
<link rel="stylesheet" type="text/css" href="{CONFIG:STYLESHEET}" />
</head>
<body>
{BODY}
</body>
</html>


То есть сначала я обрабатываю все файлы, соединяю их в одну переменную, потом я обрабатываю index.tpl и вместо {BODY} вставляю все что собрал с других файлов, причем файлы block-xxx я обрабатываю циклом, т.к. блоков может быть несколько.

3. Как парсить шаблоны? Создавать для каждого свой объект и парсить каждый кусок, потом вне класса собирать все в кучу и выводить, или может написать класс с учетом того что у меня куча файлов, чтобы шаблонизатор принимал в качестве аргумента каталог шаблона и дальше уже собиралось все внутри одного объекта.

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

Код
{FUNCTION:BLOCK:BEGIN}
... каркас блока ...
{FUNCTION:BLOCK:END}


То есть, чтобы в этом месте вызывалась функцию block, которая циклом бы выводила нужные блоки (Получить содержание из БД - отпарсить блок - закинуть в переменную, и так циклом, потом вернуть переменную)

Автор: Alexey007 15.5.2007, 20:36
CyClon, а я храню шаблоны в БД smile 
Быстрее вызывает "в студию" smile

Добавлено через 2 минуты и 5 секунд
Про парсить, я делаю замену примерно так:
Код

   $zamena['{PAGE}']  = $page;
   $page = str_replace(array_keys($zamena),array_values($zamena), $temp['index']);
   echo $page;

Пояснение надеюсь лишнееsmile вроде и так понятно. smile 

Автор: CyClon 15.5.2007, 20:43
Ну str_replace это только вступление smile)) Там без регулярок не обойтись.

Автор: GZep 15.5.2007, 20:58
Smarty всех делает... так используется механизм компиляции, поэтому работает очень быстро.

Автор: Alexey007 15.5.2007, 21:22
GZep, автор написал, чот хочет сделать свой шаблонизатор, без наворотов.. а Smarty оч. навороченный, хоть и работает быстро smile 

Автор: vasac 15.5.2007, 21:28
Цитата(CyClon @  15.5.2007,  20:22 Найти цитируемый пост)
1. Классом или функциями писать? (Вопрос хоть и глупый, но все же, может найдутся сторонники второго варианта)

Писать так, чтобы в конце не было мучительно больно.

Цитата(CyClon @  15.5.2007,  20:22 Найти цитируемый пост)
2. Какими должны быть сами шаблоны в идеале?

Идеалов нет, есть потребности конкретной задачи.

Цитата(CyClon @  15.5.2007,  20:22 Найти цитируемый пост)
весь код выдаваемой страницы, только места где нужно что-то вставить были заполнены спец-тегами типа {TITLE}, {PAGE} и т.д. 

На протяжении долгого времени я пытаюсь понять, почему создателям шаблонизаторов {TITLE} кажется более лучшим, оптимальным, быстрым и более понятным для верстальщиков-дизайнеров, чем <?=$title;?>. Пока не понял и никто объяснить мне не смог. Может вы сможете?

Автор: CyClon 15.5.2007, 21:39
Цитата
Писать так, чтобы в конце не было мучительно больно.


Значит классами smile))

Цитата
Идеалов нет, есть потребности конкретной задачи.


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

Цитата
На протяжении долгого времени я пытаюсь понять, почему создателям шаблонизаторов {TITLE} кажется более лучшим, оптимальным, быстрым и более понятным для верстальщиков-дизайнеров, чем <?=$title;?>. Пока не понял и никто объяснить мне не смог. Может вы сможете?


Чтобы "отделять мух от котлет", иначе говоря отделить программный код и HTML. Плюс не везде поддерживается <?, нужно писать <?php, а так же если вы написали <?=$title?> почему бы не написать <?php for ($i = 0; $i < 10; $i++) { sleep(1); echo $i; } ?>... Так можно сделать, но так никто не делает, ибо это выглядит как минимум по-идиотски, да и зачем тогда шаблонизатор.

Цитата
Smarty всех делает... так используется механизм компиляции, поэтому работает очень быстро.


Хочется свое написать именно для своей CMS. Смарти слишком наворочен и то время, которое я потрачку на изучение его возможностей я лучше двину в другой русло, например на изучение теории шаблонизаторов и написания своего smile

Автор: Alexey007 15.5.2007, 21:40
Цитата(vasac @  15.5.2007,  21:28 Найти цитируемый пост)
На протяжении долгого времени я пытаюсь понять, почему создателям шаблонизаторов {TITLE} кажется более лучшим, оптимальным, быстрым и более понятным для верстальщиков-дизайнеров, чем <?=$title;?>. Пока не понял и никто объяснить мне не смог. Может вы сможете?

Попытаюсь smile 
Мне кажется, что именно легче писать только скобки {}
чем много всего, типа <?=$****;?>
А так ответ:
проще воспринимается smile 


CyClon, если нужно, выдам функцию шаблонизатора.. ну и саму структуры БД smile 
Ну регулярки потом... Я просто пример показал smile 

Автор: WolfON 15.5.2007, 21:41
Интерпретатор на интерпретируемом языке - это бред, по этому надо писать либо компилирующий шаблонизатор (типа смарти, он свои шаблоны переводит в php-код), либо, если уж очень важна скорость - модуль на c\c++ к php.

А писать все это так, как удобно будет потом дорабатывать )

На мой взгляд, смарти совсем не излишен и по сути является лучшим решением, хотя для очень-уж прогрессивной cms имеет смысл выбрать связку xml + xslt.

Да и вообще, почему-бы вам просто не порыться в исходниках того-самого-смарти?

Автор: CyClon 15.5.2007, 21:49
Цитата
Интерпретатор на интерпретируемом языке - это бред, по этому надо писать либо компилирующий шаблонизатор (типа смарти, он свои шаблоны переводит в php-код), либо, если уж очень важна скорость - модуль на c\c++ к php.


Я так понял, он регулярками переводит все в PHP код, потом запускает его через eval? ) Смысл тогда?

Цитата
Да и вообще, почему-бы вам просто не порыться в исходниках того-самого-смарти? 


Огромен он, страшно рыться. Вот с по-проще шаблонизаторе порылся бы, подскажите какой-нить? smile

Автор: xolod 15.5.2007, 22:19
Цитата(CyClon @  15.5.2007,  21:49 Найти цитируемый пост)
он регулярками переводит все в PHP код, потом запускает его через eval

Нет, в Смарти три уровня:
1. Шаблоны
2. Компилированные шаблоны
3. Кеш

Шаблоны - то, что написал кодер.
Компилированные шаблоны, суть те же шаблоны, в которых конкретные действия на языке Смарти ({foreach} например) переведены в натуральный php-код.
Кеш - это обычный html с специальными заголовками и, только когда это нужно кодеру, ссылками на динамические вставки.

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

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

Напоследок: он не так огромен, это вас страшат глаза.

Автор: WolfON 15.5.2007, 22:21
А смысл в абстракции. Дизайнеру, да и программисту значительно проще читать\понимать\редактировать\осозновать код вида: {HELLO}, чем <?=$hello;?>. Про то, как выглядят всякие циклы и тд я вообще не говорю. Ну и разные приятные фишки там тоже присутствуют )

Не очень-то и огромен, никто ведь не заставляет читать все дополнительные модули - достаточно порыть всего-лишь один Smarty.class.php, благо, весь код хорошо откомментирован

Автор: vasac 16.5.2007, 07:08
Цитата(WolfON @  15.5.2007,  22:21 Найти цитируемый пост)
Дизайнеру, да и программисту значительно проще читать\понимать\редактировать\осозновать код вида: {HELLO}, чем <?=$hello;?>

Извиняюсь за назойливость, но чем проще? Имхо, это два абсолютно различных понятия — "различие алгоритмического мышления у программиста и верстальщика" и "влом набрать лишних три символа". Насчет, читать/понимать — если использовать любой редактор с элементарной подсветкой, то php-вставки будут абсолютно четко видны, в то время, как {} из простого текста визуально вычленить куда сложнее.

Цитата(WolfON @  15.5.2007,  22:21 Найти цитируемый пост)
Ну и разные приятные фишки там тоже присутствуют

Что за фишки из-за которых следует отказываться от всей мощи, скорости и гибкости PHP?

Цитата(WolfON @  15.5.2007,  22:21 Найти цитируемый пост)
Про то, как выглядят всякие циклы и тд я вообще не говорю.

Не использовать циклы и не будет проблем. А если нужно использовать, никакой шаблонизатор не поможет.

Почему-то считается, что код:
Код

{if $i==1}
  {foreach item="k" ...}
     ...
  {/foreach}
{/if}

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

<? if ($i ==1) { ?>
<? foreach ($A as $v) { ?>
...
<? }} ?>

Но фиг с ними с циклами (может быть действительно фигурные скобки сильно на умы действуют) и со Смарти (в нем все-таки есть и другие фишки). Но делать элементарные вставки {TITLE}, чтобы потом все это просто мучать str_replacом, вот в этом я смысла никакого не вижу. Извините, если что не так.

Автор: CyClon 16.5.2007, 12:54
Цитата
Свой шаблонизатор быстрее не сделаете (по крайней мере меньше чем за год-два), универсальнее тоже.


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

Код
<?php

// Каркас помпилятора

$template = 'index.tpl';
$md5f = md5_file($template);

if (!file_exists($md5f . '.tmp')) {
    // Процесс компиляции шаблона и записи его в файл с названием $md5f . '.tmp'
}

$tpl = new Template;
$tpl->loadTemplate($md5f);
$tpl->sendContent;

?>


Цитата
Извиняюсь за назойливость, но чем проще? Имхо, это два абсолютно различных понятия — "различие алгоритмического мышления у программиста и верстальщика" и "влом набрать лишних три символа". Насчет, читать/понимать — если использовать любой редактор с элементарной подсветкой, то php-вставки будут абсолютно четко видны, в то время, как {} из простого текста визуально вычленить куда сложнее.


Я готов жертвовать скоростью ради красоты реализации. Меня <?=$var?> не устраивает, я хочу максимально отделать HTML от PHP.

Цитата
Что за фишки из-за которых следует отказываться от всей мощи, скорости и гибкости PHP?


От гибкости при правильной реализации мы не отказываемся, к тому же подчерку то, что я хочу написать быстрый шаблонизатор. Повода сомвеваться в своих возможностях в данной области на данный момент нет, к тому же есть куча литературы и умные дядьки с винграда smile Быстрый шаблоинизатор - шаблонизатор с кешированием и псевдо-компиляцией. Из этого вытекает, что в скорость мы ничего не теряем, за счет кеширования шаблонизатор будет работать быстрее чем твой вариант <?=$var?> без кеширования.

Цитата
Не использовать циклы и не будет проблем. А если нужно использовать, никакой шаблонизатор не поможет.


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

Цитата
{if $i==1}
  {foreach item="k" ...}
     ...
  {/foreach}
{/if}


Я не собираюсь оргазиновывать такие конструкции в шаблоке, эти ситуации (например когда выводить "Добро пожаловать ***" или "Зарегистрируйтесь") будут обрабатываться в CMS.

Автор: vasac 16.5.2007, 13:17
Цитата(CyClon @  16.5.2007,  12:54 Найти цитируемый пост)
Повода сомвеваться в своих возможностях в данной области на данный момент нет

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

Цитата(CyClon @  16.5.2007,  12:54 Найти цитируемый пост)
Меня <?=$var?> не устраивает, я хочу максимально отделать HTML от PHP.

Т.е. тебя принципиально не устраивает именно PHP? Или ты все таки имел ввиду "HTML от программного кода"? Но ведь все эти шаблонные вставки являются все тем же программным кодом, пусть и не на PHP, точно так же не знакомыми стороннему верстальщику.

Цитата(CyClon @  16.5.2007,  12:54 Найти цитируемый пост)
Быстрый шаблоинизатор - шаблонизатор с кешированием и псевдо-компиляцией. Из этого вытекает, что в скорость мы ничего не теряем, за счет кеширования шаблонизатор будет работать быстрее чем твой вариант <?=$var?> без кеширования.

Компиляцией во что? В машинные команды? Или все-таки в тот же PHP? Тогда чем быстрее он будет чистого PHP? Нормальный php-файл, подключаемый через include() будет оттранслирован в байт-код и храниться в памяти все время работы интерпретатора (а не одного процесса).

Цитата(CyClon @  16.5.2007,  12:54 Найти цитируемый пост)
Без циклов не обойтись, так как блоков может быть неограниченное количество, при верстке шаблона мы не знаем сколько их будет + их количество может меняться.

Тогда как они будут выглядеть в синтаксисе твоего шаблонизатора, если от {foreach} ты отказываешься?

Цитата
ситуации (например когда выводить "Добро пожаловать ***" или "Зарегистрируйтесь") будут обрабатываться в CMS. 

Как обрабатываться? Формировать html-код? Тогда где же это самое чистое отделение html от PHP за которое мы тут сражаемся?

Автор: CyClon 16.5.2007, 13:30
Цитата
Я тоже совершенно не собирался сомневаться в твоих технических навыках. Я говорю о самой идее, а не о том, что ты не сможешь ее нормально реализовать.


Я тебе выше описал простоту реализации этой идея, которая будет работать очень быстро (кэширование + псевдо-компиляция)

Цитата
Т.е. тебя принципиально не устраивает именно PHP? Или ты все таки имел ввиду "HTML от программного кода"? Но ведь все эти шаблонные вставки являются все тем же программным кодом, пусть и не на PHP, точно так же не знакомыми стороннему верстальщику.


В данном случает от PHP, т.к. других интерпретируемых серверных языков не используется. Вставок у меня не будет типа foreach и т.д.

Будет что-то типо

{BLOCK_TEMPLATE:BEGIN}
Тут идет код одного блока
{BLOCK_TEMPLATE:END}

То есть, все что заключено в теги будет циклично парситься пока не будут обработаны все блоки из базы данных. Извращения типа:

Код
{BEGIN:foreach list as block}
print ... начало блока ... block ... конец блока ...
{END:foreach}


Я писать не собираюсь.

ЗЫ: Не подумайте, что я смарти считаю извращениями. Свой шаблонизатор и смарти - разные вещи, в данном случае у меня все обработкой занимается CMS, смарти же расчитан вообще на все что только можно, в т.ч. наличие только HTML шаблона и все.

Цитата
Компиляцией во что? В машинные команды? Или все-таки в тот же PHP? Тогда чем быстрее он будет чистого PHP? Нормальный php-файл, подключаемый через include() будет оттранслирован в байт-код и храниться в памяти все время работы интерпретатора (а не одного процесса).


Компиляция блоков {BLOCK_TEMPLATE:BEGIN} и т.д. в нечто типа:

Код
<?php

foreach ($list as $block) { ... }

?>


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

Цитата
Тогда как они будут выглядеть в синтаксисе твоего шаблонизатора, если от {foreach} ты отказываешься?


Смотри выше, {BLOCK_TEMPLATE:BEGIN}-{BLOCK_TEMPLATE:END} будет обрабатываться циклом в PHP.

Цитата
Как обрабатываться? Формировать html-код? Тогда где же это самое чистое отделение html от PHP за которое мы тут сражаемся?


Я сражаюсь с отделением PHP кода от ядра системы, в блоках и модулях он будет допустим. В данном случае будет вставлен блок в нужное место.

Автор: WolfON 16.5.2007, 14:42
vasac, повторюсь, что есть такое слово, как абстракция. Не надо тут разводить демагогию, если-бы небыло от нее пользы - все-бы писали на ассемблере.


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

Автор: CyClon 16.5.2007, 14:50
Не знаком с x-технологиями, есть статьи для новичков? smile Знаю лишь что такое xml примерно и все.

Кстати, вот статейку нашел о синтаксисах шаблонов: http://alexlebedev.com/blog/on-html-templates/

Мне по душе "Основанный на XML" пришелся, ну и "Специализированный синтаксис + HTML" конечно же.

Автор: vasac 16.5.2007, 15:06
Цитата(WolfON @  16.5.2007,  14:42 Найти цитируемый пост)
повторюсь, что есть такое слово, как абстракция. Не надо тут разводить демагогию, если-бы небыло от нее пользы - все-бы писали на ассемблере.

Каким образом такие термины как "абстракция" и "демагогия" коррелируют друг с другом, упоминанием ассемблера и тем, что я тут говорил?

Автор: WolfON 16.5.2007, 15:50
CyClon, конечно - http://raleigh.ru/XML/XSLTutorial/ 


vasac, ок, обьясняю. Суть в том, что если-бы программисту не было удобно упрощение синтаксиса и более наглядные конструкции (в жертву скорости зачастую), коими {VAR}, в отличии от <?=$var;?> и являются (более сложные, особенно), то и не изобрели разного рода языки высокого уровня, тем более интерпретируемые. Опять-таки отделение php-кода от кода шаблонов - дизайнер по незнанию не сможет ничего напортачить и сделать трудно-уловимую ошибку. А демагогия заключается в том, что этот спор по большей части оффтопик, а аргументы заключается только в манипулировании словами, что "для меня так удобнее" и "я не понимаю". Никто ведь вас не заставляет писать свой шаблонизатор или использовать чей-то другой, если не нравится. Но преимущества шаблонизатора перед чистым php-кодом, я вроде обосновал.

Автор: xolod 16.5.2007, 17:08
Цитата(CyClon @  16.5.2007,  12:54 Найти цитируемый пост)
Ты думаешь я не умею работать с файлами bla-bla-bla

Не надо тыкать, вы уже не в школе, я не ваш старый приятель.

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

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

Автор: CyClon 16.5.2007, 18:55
Цитата
Я ничего не думаю, я утверждаю что вы не сможете написать шаблонизатор лучше и быстрее, чем это делают 5 основных и куча побочных разработчиков Смарти на протяжении уже нескольких лет. Это не говорит вам о том, что вы плохой (начинающий, переходящий, не практикующий) разработчик.

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


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

У кого еще какие мысли будут по этому поводу?

WolfON, за ссылку спасибо, почитаю на досуге smile

Автор: CyClon 16.5.2007, 19:22
Полистал по XSLT доки, в общем, там идет преобразование XML кода, это мне не подходит, ибо дизайнеры все верстают на HTML (или xHTML), вот его мне и нужно преобразовывать. Или может я не так понял суть шаблонизатора, основанного на XSLT? Объясните.

Автор: vasac 16.5.2007, 19:41
Цитата
А демагогия заключается в том, что этот спор по большей части оффтопик, а аргументы заключается только в манипулировании словами, что "для меня так удобнее" и "я не понимаю".

Я не манипулировал словами ни в одном месте данной темы. И демагогию разводить так же не намерен. Просто человек занят разработками в данной области и хотел, чтобы другие поделились с ним опытом. А опыт у меня какой-никакой имеется. И в моей деятельности был период "нужно делать вообще-вообще абстрактно и вообще-вообще универсально, только что такое абстрактно я понимаю слабо". Слава богу, отпустило. И не собираюсь навязывать своего мнения. Просто хочу, чтобы как автор темы, так и, возможно, те, кто будет читать, поняли, что есть взгляды, альтернативные "невероятно полному отделению всего от всего" и, возможно, более критично посмотрели на свою концепцию.

Цитата
Суть в том, что если-бы программисту не было удобно упрощение синтаксиса и более наглядные конструкции (в жертву скорости зачастую), коими {VAR}, в отличии от <?=$var;?> и являются (более сложные, особенно), то и не изобрели разного рода языки высокого уровня, тем более интерпретируемые.

Избавьте меня от курса информатики за 7-й класс, тем более, что вывернули вы все наизнанку. Отнюдь, не синтаксисом уровни языков отличаются. А возможностью на качественно ином уровне решать проблему. "{", вместо "<?=" этого делать не позволяет.

Цитата
Никто ведь вас не заставляет писать свой шаблонизатор или использовать чей-то другой, если не нравится.

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

Поймите, я не против шаблонизаторов, смарти, {TITLE} и т.п. Я против того, чтобы верстальщиков считали дебилами.

Автор: CyClon 16.5.2007, 21:08
Цитата
Поймите, я не против шаблонизаторов, смарти, {TITLE} и т.п. Я против того, чтобы верстальщиков считали дебилами.


Верстальщик не обязан знать PHP. Если он будет что-то на нем писать -> будут ошибки синтаксические.

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

Автор: Хрипа 17.5.2007, 00:27
Вообщем конечно много написали про шаблоны но лучше всего делать так:
Код

session_start();
include("cfg.php"); //Конект к базе + либа для работы с mysql + настройки сайта и темы по дефолту + количество запесей на страницу и прочие настройки
include("interpretator.php"); // Обработчик входящих переменных
include("templ/$_COOKIE[tem].php"); // Шаблон сайта
draw_head($title,$banners); // Шапка сайта
draw_lfet_menu($links);
if ($this->$page == "index") draw_news($news);
if ($this->$page == "else") draw_content($content);
draw_right_menu($r_links);
draw_foot($glob_querys);
примерно так у меня выглядит index.php на который ссылаются все ссылки.
Контент создоётся так
$content .= "ddd";
$content .= "sss";

при помоши preg_replace ereg_replace можно отслеживать и проверять контент очень удобно и гибко
Далие файл шаблона содержит html который упровляется через функции draw_ в которые я скидую уже проверенные переменные из файла interpretator.php Лёгко можно менять бекраунд и картинку и прочие просто добавить переменную в функцию и дописать в html

Автор: vasac 17.5.2007, 09:37
Цитата(CyClon @  16.5.2007,  21:08 Найти цитируемый пост)
хотел бы услышать советы по его реализации, а не мнения рода "долой шаблонизаторы"

Я такого мнения не выражал. Шаблонизаторы это несомненно важнейшая вещь. Именно про вариант его реализации я и говорю.

Цитата(CyClon @  16.5.2007,  21:08 Найти цитируемый пост)
я захотел шаблонизатор - значит я его сделаю

И это правильно! И не слушайте никого про "велосипеды с квадратными колесами". 

Автор: CyClon 17.5.2007, 13:17
Цитата
Я такого мнения не выражал. Шаблонизаторы это несомненно важнейшая вещь. Именно про вариант его реализации я и говорю.


<?=$var?> - ты называешь это шаблонизатором? Шаблоинизатор, по идее, это какой-то программный код, который переводит более простой язык самописный на PHP, в данном случае.

Автор: vasac 17.5.2007, 13:51
Цитата(CyClon @  17.5.2007,  13:17 Найти цитируемый пост)
переводит более простой язык самописный на PHP

Не, это транслятор smile
А шаблонизатор это то, что позволяет внедрять шаблоны и разруливает взаимодействие м/у ними и всем остальным.

Автор: CyClon 18.5.2007, 18:41
Вроде бы все обдумал, решил сделать шаблон в одном файле, но тут задумался о кэшировании, мне нужно будет в последствии кэшировать сайт поблочно, как это можно организовать для шаблона в одном файле? То есть мне нужно будет на шапку и низ поставить 2 часа, а для тела уже другие тайм-ауты.

Автор: WolfON 18.5.2007, 18:51
Разбить на блоки, вестимо
Что-то вроде того, что
Код

{BLOCK_HEADER timeout=2}
....
{/BLOCK_HEADER}
{BLOCK_MENU timeout=1}
....
{/BLOCK_MENU}
{BLOCK_FOOTER timeout=2}
....
{/BLOCK_FOOTER}


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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)