Страница 1 из 3

Шаблоны

Добавлено: 2008-12-28 21:15:16
zg
совсем недавно наткнулся на такую штуку http://sourceforge.net/projects/php-templates/. Заинтерисовало тем, что на пхп.нет про неё ни слова не написано. Почитал доку, в принципе вещь интересная. Кто-нибудь ей пользовался?

Re: [PHP] Шаблоны

Добавлено: 2008-12-28 21:59:25
Alex Keda
невижу каких-то преимуществ перед самописными темплейтами, которые юзаю.
может будет чуть быстрей - но у у меня и так тысячные секунды на сбрку из полусони шаблонов...

Re: [PHP] Шаблоны

Добавлено: 2008-12-28 22:47:21
zg
я тоже честно говоря не вижу никаких преимуществ -)))) однако он компилированный модуль, это уже интересно, потому что сколько бы не кичился тотже смарти своей красотой и быстротой, ресурсов он кушает немало. Удручает тут собственно функционал - очень скудно. Но хотелось бы услышать ещё мнение тех, кто его юзал.

На данный момент, я так думаю, надо переходить тотально на XSLT. Но может я чего-то упускаю отказываясь от этого модуля? :smile:

Re: [PHP] Шаблоны

Добавлено: 2008-12-29 3:46:31
ProFTP
где-то было написано что этот шаблон из perl интегрировали (не смотрел - не знаю)

про смарти говорили что не реально использовать, но легко там просто массивы загрузить, то есть только ресурсов выделить, я использвоал gallery2, которая на смарти, это ужос был на одного пользователя 10М рама

если используется mod-php, то php и html одно целое как и разницы нету где html...

Re: [PHP] Шаблоны

Добавлено: 2008-12-29 8:15:02
zg
ProFTP писал(а):я использвоал gallery2, которая на смарти, это ужоснах был на одного пользователя 10М рама
-))) есть такое дело. Но если бы смарти был компилированным модулем пхп на С++, то я бы пожалуй его использовал и неважно, сколько бы он жрал. Важно то, что он бы был включён в дистрибутив пхп.
ProFTP писал(а):если используется mod-php, то php и html одно целое как и разницы нету где html...
суть не в этом, а в том чтобы разделить логически обработку информации и её вывод. Это позволяет во-первых упростить код, а во-вторых разделить работу - одни пишут шаблоны, вторые пишут логику. Смарти делал упор как раз на это разделение.

В принципе с точки зрения обывателя смарти избавляет от многих проблем и даёт весомые преимущества. Но чтобы его использовать надо знать как минимум два языка - пхп и смарти :smile: Платой за простоту является невозможность проверки синтаксиса на стадии редактирования и выбора переменных из списка. Это позволяет к примеру зенд студия для пхп. Поэтому я рассуждал примерно так - если на входе имеем пхп-код и на выходе такой же пхп-код, то на кой тогда смарти?!...

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

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

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

Re: [PHP] Шаблоны

Добавлено: 2008-12-29 8:25:10
ProFTP
я использую HTML::Template кэширую в оперативку

Код: Выделить всё

blind_cache - if set to 1 the module behaves exactly as with normal caching but does not check to see if the file has changed on each request. This option should be used with caution, but could be of use on high-load servers. My tests show blind_cache performing only 1 to 2 percent faster than cache under mod_perl.

NOTE: Combining this option with shared_cache can result in stale templates stuck permanently in shared memory!
еще есть

http://search.cpan.org/~tinita/HTML-Tem ... ompiled.pm
http://search.cpan.org/~samtregar/HTML- ... .05/JIT.pm

можно пхп сессии использовать а шаблоны на перле
артлебедева
что это? от чего?

Re: [PHP] Шаблоны

Добавлено: 2008-12-29 8:33:43
zg
ProFTP писал(а):еще есть httр://search.cpan.org/~tinita/HTML-Tem ... ompiled.pm
-))) это практически XSLT в чистом виде, только проще и намного быстрее.
ProFTP писал(а):можно пхп сессии использовать а шаблоны на перле
не, пожалуй это перебор -)))

Re: [PHP] Шаблоны

Добавлено: 2008-12-29 9:41:08
hizel
вот еще есть отечественная разработка
http://reki.ru/products/ctpp/

Re: [PHP] Шаблоны

Добавлено: 2008-12-29 13:17:07
zg
hizel писал(а):вот еще есть отечественная разработка

Код: Выделить всё

Пример 3.1:
Шаблон:

<table width="100%">
    <TMPL_loop EMPLOYEE_INFO>
    <tr>
    <td>#: <TMPL_var __COUNTER__></td>
        <td>Имя: <TMPL_VAR NAME></td>
        <td>Должность: <TMPL_VAR JOB></td>
        </tr></TMPL_LOOP>
</table>
сильно смахивает на XSLT
В тоже время, библиотека быстрее широкоизвестных проектов типа Xalan-C или libxslt потому, что не предоставляет излишнюю, зачастую ненужную, но снижающую производительность функциональность.
.... :smile:

Re: [PHP] Шаблоны

Добавлено: 2008-12-29 13:40:31
zg

Код: Выделить всё

		<xsl:for-each select="table/column">
	<th>
		<a href="{@href}" title="{.}"><xsl:value-of select="." /></a>
	</th>
		</xsl:for-each>
а так выглядит цикл на XSLT... несколько сложнее, но не сильно.

Re: [PHP] Шаблоны

Добавлено: 2008-12-29 13:44:56
hizel
они все похожи, тут оно по мотивам HTML::Templates сделано
мне из тэмплейтов больше нравится то, что сделанно в python
особенно Jinja

Код: Выделить всё

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
    <title>My Webpage</title>
</head>
<body>
    <ul id="navigation">
    {% for item in navigation %}
        <li><a href="{{ item.href }}">{{ item.caption }}</a></li>
    {% endfor %}
    </ul>

    <h1>My Webpage</h1>
    {{ a_variable }}
</body>
</html>

Re: [PHP] Шаблоны

Добавлено: 2008-12-29 14:31:00
ProFTP
я смотрел и пилил несколько больши программ на пхп, лучше всего без шаблона можно разделить данные в 2 этапа...в первом код. а во втором шаблон

Re: [PHP] Шаблоны

Добавлено: 2008-12-29 14:33:57
ProFTP
hizel писал(а):они все похожи, тут оно по мотивам HTML::Templates сделано
мне из тэмплейтов больше нравится то, что сделанно в python
особенно Jinja

Код: Выделить всё

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
    <title>My Webpage</title>
</head>
<body>
    <ul id="navigation">
    {% for item in navigation %}
        <li><a href="{{ item.href }}">{{ item.caption }}</a></li>
    {% endfor %}
    </ul>

    <h1>My Webpage</h1>
    {{ a_variable }}
</body>
</html>
элементов много кажется на странице? шаблон должен быть такой чтобы не ставить дофига всего, или зачем тогда шаблон?

В чем разница

Код: Выделить всё

    for item in navigation {
     echo '   <li><a href="{{ item.href }}">{{ item.caption }}</a></li>'
    }
а как ты заносишь данные в шаблон?

Код: Выделить всё

push @{$rows}, $_ while $_ = $sth->fetchrow_hashref();
 
# instantiate the template and substitute the values
my $template = HTML::Template->new(filename => 'songs.tmpl');
$template->param(ROWS => $rows);

<table>
<!-- TMPL_LOOP NAME=ROWS -->
   <tr>
      <td><!-- TMPL_VAR NAME=TITLE --></td>
      <td><!-- TMPL_VAR NAME=ARTIST --></td>
      <td><!-- TMPL_VAR NAME=ALBUM --></td>
      <td><!-- TMPL_VAR NAME=YEAR --></td>
   </tr>
<!-- /TMPL_LOOP -->
</table>

Код: Выделить всё

my $data = $DBH->selectall_arrayref("
   select @{[join(',', @COLS)]}
   from songs
   order by ?
", undef, ($sort));

# prepare the DS for the headers

# prepare the DS for the rows
my $i;
my $rows = [
   map {
      my $row = $_;
      (++$i % 2)
         ? { ODD  => [ map { {VALUE => $_} } @{$row} ] }
         : { EVEN => [ map { {VALUE => $_} } @{$row} ] }
   } @{$data}
];


<TMPL_LOOP NAME=ROWS>
   <tr>
   <TMPL_UNLESS NAME="__ODD__">
      <TMPL_LOOP NAME=EVEN>
         <td style="background: #B3B3B3"><TMPL_VAR NAME=VALUE></td>
      </TMPL_LOOP>
   <TMPL_ELSE>
      <TMPL_LOOP NAME=ODD>
         <td style="background: #CCCCCC"><TMPL_VAR NAME=VALUE></td>
      </TMPL_LOOP>
   </TMPL_UNLESS>
   </tr>
</TMPL_LOOP>

Re: [PHP] Шаблоны

Добавлено: 2008-12-29 15:21:02
hizel
да везде принцип одинаковый
разделяем логику обработки данных и логику отображения данных, тут довольно тонкая граница, можно легко скотицо к аля-php всё в одном
разные системы шаблонов по разному в этом плане ориентированы
некоторые, как например HTML::Templates жестоко ограничивают кол-во операций и возможностей
другие отдают на откуп создателю, такие например как Template Toolkit, в котором с помощью плагинов, можно даже мускул запросы слать

золотую середину каждый выбирает сам ;)

Re: [PHP] Шаблоны

Добавлено: 2008-12-29 15:26:50
ProFTP
это тоже жырная штука Template Toolkit, можно на ней написать CMS, не использую perl и php

Re: [PHP] Шаблоны

Добавлено: 2008-12-29 15:29:19
hizel
это из той же серии, что и "можно гланды через анус отрезать" :roll:

Re: [PHP] Шаблоны

Добавлено: 2008-12-29 15:33:54
ProFTP
это кстате можно так как у тебя в это шаблоне шаблолне будет myqsl, массивы, хэши, цыклы, арифметические выражения

Re: [PHP] Шаблоны

Добавлено: 2008-12-29 15:40:31
hizel
ты это к чему ?

вот еще аспект - разделение труда
в самом элементарном случае, один программист и один дизайнер
дизайнеру нужен инструмент который не напрягает его лишними знаниями,
то есть попробуй напряги и выучи человека xslt
нужен простой язык шаблонов причём такой чтобы его ограничители не ломали например подсветку в редакторе HTML-ном
jinja как раз с таким прицелом и делалась их кстати таких еще пачка в интернетах
чего чего а шаблонов для pythn вагон и тележка, разных есть и xml подобные

Re: [PHP] Шаблоны

Добавлено: 2008-12-29 18:31:42
zg
а кто-нибудь XSLT юзает? пятый раз начинаю читать спецификацию XSLT и всё-равно нифига не понимаю...

Re: [PHP] Шаблоны

Добавлено: 2008-12-30 16:20:51
Volodymyr
zg писал(а):а кто-нибудь XSLT юзает? пятый раз начинаю читать спецификацию XSLT и всё-равно нифига не понимаю...
Я использовал на старой роботе. Жутко интересная вещь. Чем-то на Пролог похожа. Два единственных минуса. 1. Очень прожорливая (тогда оно саблотроном крутилось, сейчас говорят не особо шустрее стало) ну и 2. Нелинейность языка все-таки резко сужает количество разработчиков которые могут поддерживать. вот и скатился к Смарти с его компилированными шаблонами (по суте тоже РНР)и кешированием страниц. Если честно по скорости нареканий пока нету, хотя смотреть надо в каждом частном случае. А возможность вынесение части бизнес логики (кстати это присутствует и XLST что является не плохим плюсом) делает некоторые вещи более простыми что-ли (например подбитие суммы в колонках при выводи таблиц во время ее формирования). Еще одна позитивная сторона XLST - возможность трансформации на стороне клиента. В таком случае ресурсы экономятся отлично, но не все браузеры умеют делать трансформацию XML-ля. Алгоритм роботы просто, данные в XML, а XML на трансформацию XLST (шаблон). Или же 2 документа на пользователя.

P.S. в свое время писал свои шаблонизаторы, если базироваться суто на парсинге то есть проигрыш компилированы в РНР шаблонам.

Re: [PHP] Шаблоны

Добавлено: 2008-12-30 19:11:08
jeehadina
для самописных движков Smarty - лучшее решение, ИМХО.
и все это баян про его неповоротливость. при сегодняшних соотношениях цен на рабочие руки и более мощные железки Smarty рулит.

Re: [PHP] Шаблоны

Добавлено: 2008-12-30 19:20:14
Volodymyr
jeehadina писал(а):для самописных движков Smarty - лучшее решение
А что есть не самописный движок?

Re: [PHP] Шаблоны

Добавлено: 2008-12-30 20:08:53
jeehadina
Volodymyr писал(а):
jeehadina писал(а):для самописных движков Smarty - лучшее решение
А что есть не самописный движок?
я имел в виду веб-приложения? написанные без использования "вседелающих" фреймворков и CMS. (joomla, drupal, nuke, чего там еще.),
где составлящие организующие взаимодействие с БД, кешем, шаблонами и т.д. писалось для конкретного проекта, либо собиралось из уже готовых решений.

Re: [PHP] Шаблоны

Добавлено: 2008-12-30 20:09:45
jeehadina
сорри, затупил. :-D
Не самописный движок: joomla, nuke, dle, drupal
это имелось в виду

Re: [PHP] Шаблоны

Добавлено: 2008-12-30 20:16:52
Volodymyr
jeehadina писал(а):Не самописный движок: joomla, nuke, dle, drupal
А его пишут не такие же люди как мы? На самом деле это просто готовые поделки в основном солянка из таких же готовых вещей. Кстати в большинстве из них внутри можно обнаружить тот же смарти. Если не в чистом виде, то в виде концепта . Хотя последнее время идет в обычной поставке классов.