MACRO - стотысячная попытка сделать новый PHP шаблонизатор

dark-demon

d(^-^)b
pachanga, без рекурсии-то можно, но особого смысла нет.

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

atv

Новичок
- порог входа слишком разный
Зато одноразовый, так как XSLT - стандарт, и рано или поздно можно будет найти верстальщика, знающего XSLT. Попробуйте нати верстальщика под MACRO.

Код:
<?php if($data['some_var'] instanceof chapter) { ?>
{{include file="chapter.phtml"}}
<?php } ?>
Зачем? Зачем представлению знать о каком то наследовании, которое относится к слою модели?
Пример был приведен как приблизительная аналогия коду:
Код:
<xsl:template match="chapter">
  <fo:block>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>
что бы указать на то, что "chapter", является типом, а не конкретной переменной, то есть "chapter" более абстрактное, более низкоуровневое понятие, а уже шаблон для этого "chapter" находиться на уровне приложения, который, к тому же, можно переопределить. В PHP шаблонизаторах нет таких возможностей (я не говорю что их нельзя реализовать).

а include, функции и методы не абстракции?
Являются, но не теми, которые необходимы шаблонизатору.

Event Driven это конечно хорошо, но лучшая PHP-реализация с которой приходилось сталкиваться - Prado, оставила после себя очень неприятный осадок over engineering'а и грязных хаков, для реализации функциональности, которую не предусмотрели ее создатели.
Ну ты же понимаешь что плохая реализация не является критерием оценки самого подхода...

И давно ты пользуешься xslt?
Я давно пользуюсь. А до того как начал пользоваться тоже писал шаблонизатор, который можно увидеть в PHP_Application. Шаблонизатор очень простенький и поместился всего в одном файле, но тем неменее в нём заложены большие возможности, делающие его достаточно гибким. Однако после некоторого времени разработки понял, что иду по пройденному пути XSLT, после чего окончательно перешёл на него, хотя и его возможностей уже не хватает.
 

CatManZero

Новичок
Автор оригинала: atv
...
Однако после некоторого времени разработки понял, что иду по пройденному пути XSLT, после чего окончательно перешёл на него, хотя и его возможностей уже не хватает.
Интересно. А каких именно возможностей не хватает?
 

pachanga

Новичок
Автор оригинала: atv
Зато одноразовый, так как XSLT - стандарт, и рано или поздно можно будет найти верстальщика, знающего XSLT. Попробуйте нати верстальщика под MACRO.
Любой PHP кодер сможет использовать MACRO через 5 минут, а вот в XSLT черт ногу сломит. Про скорость отработки XSLT я вообще промолчу..
 

dark-demon

d(^-^)b
последний раз предлагаю не говорить глупостей не прочитав доки по xslt.
 

pachanga

Новичок
Автор оригинала: dark-demon
последний раз говорю не говорить глупостей не прочитав доки на xslt.
Пошли уже угрозы? ;) Ты мне вот лучше скажи, большой любитель xslt, как у вас там происходит связь, например, модели и элементов формы в вашем чУдном мире xslt?
 

atv

Новичок
Интересно. А каких именно возможностей не хватает?
Наследования и полиморфизма :). То что делает ООП таким гибким и реюзабельным.

Любой PHP кодер сможет использовать MACRO через 5 минут
а верстальщик?...

как у вас там происходит связь, например, модели и элементов формы в вашем чУдном мире xslt?
Исключительно с помощью интерфейсов :)
 

CatManZero

Новичок
Автор оригинала: atv
Наследования и полиморфизма :). То что делает ООП таким гибким и реюзабельным.
Ну ни фига себе у Вас требования к шаблонизатору :cool:
Мне, допустим, очень не хватает такой вещи:
PHP:
<xsl:variable name="tmpl" select="..."/>
<xsl:import href="$tmpl"/>
Если сайт многоязычный и шаблоны отличаются только оберткой (footer, header), приходится либо комбинировать в одном шаблоне две обертки, либо забивать и делать в отдельной папке копии всех шаблонов.

В других шаблонизаторах с этим как-то по проще...
 

korchasa

LIMB infected
Автор оригинала: atv
Зато одноразовый, так как XSLT - стандарт, и рано или поздно можно будет найти верстальщика, знающего XSLT. Попробуйте нати верстальщика под MACRO.
Его можно обучить, гораздо быстрее, чем дождаться верстальщика XSLT, и обходится он дешевле ;)

Являются, но не теми, которые необходимы шаблонизатору.
Вы про наследование и полиморфизм? Может на примере? Использование одной функции в другой это не частный случай наследования, т.е. добавления функциональности к уже существующей (по большому счету)?

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

Однако после некоторого времени разработки понял, что иду по пройденному пути XSLT, после чего окончательно перешёл на него, хотя и его возможностей уже не хватает.
Тем более зачем себя ограничивать каким-то стандартом, если вы из него выросли? Используйте РНР!
 

pachanga

Новичок
Автор оригинала: dark-demon
правильная организация такая: один контроллер может вызывать другие контроллеры, потом сформированные данные передаются шаблону и он трансформирует переданные ему данные в нужную для вывода форму.
не шаблон должен определять выводить ли новости и какие, а контроллер. от шаблона зависит лишь как они будут выглядеть и где находиться.
Ты мне прямо-таки открыл глаза. Давай так, я тебе покажу конкретный пример с MACRO, а ты поделишься примером, как для этого случая отработают твои контроллеры?

Имеем шаблон для вывода новостей:

include/news.phtml
Код:
<?php $news = News :: findLatest(); ?>
{{list using="$news" as="$item"}}
<div id='news'>
{{list:item}}{$item.title}...{{/list:item}}
{{list:glue}}<hr/>{{/list:glue}}
</div>
{{/list}}
Имеем шаблон главной страницы:
main.phtml
Код:
...
<!-- где-то по центру-->
{{include file="include/news.phtml"}}
...

Имеем шаблон второстепенной страницы:
secondary.phtml
Код:
...
<!-- где-то в левой колонке -->
{{include file="include/news.phtml"}}
...
Верстальщик полностью имеет контроль за тем, что и как будет выводится без нужды править что-то в контроллерах. А что происходит в XSLT для этого случая? (надеюсь, ты мне не будешь показывать возможность PHP callbacks из XSLT и утверждать, что это "правильный" способ?)
 

dark-demon

d(^-^)b
программист формирует данные, например:
PHP:
<data>
	<news>
		<item>blah-blah-blah</item>
		<item>blah-blah-blah</item>
		<item>blah-blah-blah</item>
	</news>
	<menu>
		<item>blah-blah-blah</item>
		<item>blah-blah-blah</item>
		<item>blah-blah-blah</item>
	</menu>
	<submenu>
		<item>blah-blah-blah</item>
		<item>blah-blah-blah</item>
		<item>blah-blah-blah</item>
	</submenu>
	<user>
		<name>foo</name>
		<id>1024</id>
		<age>128</age>
	</user>
	<content>
		blah-blah-blah
	</content>
</data>
а верстальщик составляя свой набор шаблонов вытягивает их (данные) с помощью xpath.
 

CatManZero

Новичок
А чего такого плохого PushView? Ну нельзя из xslt шаблона обратиться к контроллеру? Ну и что? Зато xslt преобразование запросто может быть возложено на клиента, чего MACRO и не снилось. Благо лиса и эксплорер (как самые популярные браузеры), поддерживают это.
 

pachanga

Новичок
Автор оригинала: CatManZero
А чего такого плохого PushView?
Где я сказал, что это плохо? MACRO это тоже поддерживает.

Ну нельзя из xslt шаблона обратиться к контроллеру? Ну и что?
Причем здесь контроллер? Я показал пример, как MACRO работает _напрямую_ с моделью без ненужной в данном случае прослойки из контроллера. XSLT это умеет?

Зато xslt преобразование запросто может быть возложено на клиента, чего MACRO и не снилось. Благо лиса и эксплорер (как самые популярные браузеры), поддерживают это.
Вот серьезно, ты где в реальном проекте это использовал? Ну да, давайте мне еще про абстрактную возможность генерации pdf расскажите при помощи XSLT. Если уж меня столь сильно припечет, я с помощью MACRO нагенерю и XML и XSLT преобразование, которое передам на клиента.

-~{}~ 15.10.07 22:26:

dark-demon

Не забывай, я тебя также попросил показать, как вы интегрируете XSLT с компонентами формы.
 

CatManZero

Новичок
Автор оригинала: pachanga
Где я сказал, что это плохо? MACRO это тоже поддерживает.
Я хотел сказать, что плохого в том, что XSLT поддерживает только PushView?

Нет. Всё-таки это бесполезный спор. Что лучше самописный шаблонизатор или стандартный?

Конечно, MACRO лучше, так как его возможности шире. Но лучше он только в рамках php.

Я не понимаю, почему такое странная неприязнь к xml и xslt в частности... :confused:

-~{}~ 15.10.07 22:54:

Автор оригинала: pachanga
Вот серьезно, ты где в реальном проекте это использовал?
Нет. Эту возможность имеет смысл рассматривать, для снижения нагрузки на сервер. Я с такого рода оптимизацией ещё не сталкивался. Но лично проверял, что это работает. И лиса, и эксплорер без проблем справляются с xslt преобразованием шаблонов типичного сайта.

-~{}~ 15.10.07 23:04:

Автор оригинала: pachanga
Если уж меня столь сильно припечет, я с помощью MACRO нагенерю и XML и XSLT преобразование, которое передам на клиента.
MACRO в этом случае будет лишней прослойкой. Хотя это лишний раз доказывает, что MACRO можно использовать для любых задач.
А на счет XSLT-преобразования не понял. Ты это серьёзно? ;) Было-бы интересно посмотреть на реализацию XPath на php.
 

pachanga

Новичок
Автор оригинала: CatManZero
Я хотел сказать, что плохого в том, что XSLT поддерживает только PushView?
А что в этом хорошего? На лицо явное ограничение, которое значительно усложняет жизнь разработчика.

Нет. Всё-таки это бесполезный спор. Что лучше самописный шаблонизатор или стандартный?
Стандартный для кого? Для руководителей, которые живут в иллюзорном мире различных парадигм и "грамотном разделении приложения на слои"? Которые заставляют верстальщика мучиться с XSLT красотами вместо того, чтобы быстро, и самое главное, понятно решать задачу?

Конечно, MACRO лучше, так как его возможности шире. Но лучше он только в рамках php.
А никто с этим и не спорит. Узкоспециализированный инструмент всегда эффективнее абстрактного и неуклюжего монстра.

Я не понимаю, почему такое странная неприязнь к xml и xslt в частности... :confused:
А я не понимаю, за что его любить-то? Эра повальной XML-мании и hype'а на эту тему успешно закончилась, аминь! Да, XML хорош в некоторых частных случаях(например, передача данных, хотя опять же это спорное утверждение), но зачем же его стараться пихать везде? Наверное, не спроста разработчики меняют неуклюжие XML конфиги на YAML, или используют rake вместо Ant?

-~{}~ 15.10.07 23:09:

Нет. Эту возможность имеет смысл рассматривать, для снижения нагрузки на сервер...
Давай еще вспомним про XForms и другие греющие душу призрачные клиентские технологии.

А на счет XSLT-преобразования не понял. Ты это серьёзно? ;) Было-бы интересно посмотреть на реализацию XPath на php.
Нет, я всего лишь имел в виду возможность генерации XSLT при помощи шаблона MACRO.
 

CatManZero

Новичок
Автор оригинала: pachanga

А я не понимаю, за что его любить-то? Эра повальной XML-мании и hype'а на эту тему успешно закончилась, аминь! Да, XML хорош в некоторых частных случаях(например, передача данных, хотя опять же это спорное утверждение), но зачем же его стараться пихать везде? Наверное, не спроста разработчики меняют неуклюжие XML конфиги на YAML, или используют rake вместо Ant?

Давай еще вспомним про XForms и другие греющие душу призрачные клиентские технологии.
Сомнительно, что получится так просто избавиться от последствий XML-мании. Слишком много завязано на нем. Это и HTML и DOM, благодаря которому появились такие замечательные вещи как jQuery и различные wisiwyg-редакторы.

Ну чтож заценим-заценим, что это за yaml такой. По примерам выглядит не плохо. Но нужна замена xpath и dom. Надеюсь я это там увижу...

-~{}~ 16.10.07 00:09:

Что касательно MACRO, то возможно возьму его на вооружение для одного проекта, если он состоится. Всё-таки велик соблазн использовать уже имеющиеся xml/xslt наработки.
 

dark-demon

d(^-^)b
ну вот простейший контроллер:
<?
$reg= $scriptArg[1];
$data= [];
$data['news']= inc( 'news', $reg );
$data['menu']= inc( 'menu/main', $reg );
$data['user']= inc( 'user/info', $reg );
$data['content']= inc( $reg[ 'handler' ], $reg );
echo inc( 'page/make', $reg + array( 'output' => $data ) );
?>
или опять не то? :)
 
Сверху