Идеальный шаблонизатор, рассматриваемый в данной теме, привязан. Иначе мы имеем опасность не получить конкретной реализации или получить такую сугубо абстратктную реализацию, которой будут пугать детей. XSLT уже номинант в этой категории.Идеальный шаблонизатор не должен быть привязяан к какой -то конкретной парадигме.
Кто сказал, что наш идеальный шаблон должен быть похожим на XSLT'шный? В данном конкретном случае, когда блок <LI> вынесен за пределы <UL>, это добавяет лишнюю абстракцию или условность, совершенно ненужную для нашего идеального шаблона. В данном случае нахождение <LI> между <UL> (где ему и положено по логике) -- обязательное условие контрольной задачи.Не согласен с таким примером [идеального шаблона дерева]. Не забывайте, что вся структура документа представляет собой дерево, наиболее удачное и гибкое решение предоставляет XSLT
К этому списку мы как раз должны подойти. Это и будет шаблонизатор с расширенной функциональностью, который мы ищем или создаем. Единственный имеюшийся на данный момент как-то соответствующий ему - XSLT. Но для того и даны были две контрольных задачи, чтобы не уплывать в облака. Соответствовать-то идее он соответствует, но как решает конкретные задачи?Bakti9rov привёл более правильный список
Ты вед не пользовался XSLT ;-)atv, плохие примеры ты фактически заменяешь table/tr/td на table/row/cell, что не имеет никакого смысла.
Отображение будет происходить как раз по тем самым правиламИ как будет происходить отображение? В твоем примере я не вижу даже использования исходных данных.
А входными данными является XML документ. который передаётся шаблонизатору.в) шаблонные правила, которые в зависимости от разметки преобразуют шаблон.
Ещё раз повторю, не нужно никаких циклов для отображения XML данных, это ограничивает повторное использование шаблонов.Ну можно и попонятнее составлять шаблоны. Например так:
Ага, а как же повторное использование кода?В данном конкретном случае, когда блок <LI> вынесен за пределы <UL>, это добавяет лишнюю абстракцию или условность, совершенно ненужную для нашего идеального шаблона.
"Покупатели имеют возможность купить автомобиль любого цвета, при условии что этот цвет чёрный" (с) Генри Форд.В данном случае нахождение <LI> между <UL> (где ему и положено по логике) -- обязательное условие контрольной задачи.
Пожалуйста. Шаблон дерева. ul и li в одном флаконе:Кто сказал, что наш идеальный шаблон должен быть похожим на XSLT'шный? В данном конкретном случае, когда блок <LI> вынесен за пределы <UL>, это добавяет лишнюю абстракцию или условность, совершенно ненужную для нашего идеального шаблона. В данном случае нахождение <LI> между <UL> (где ему и положено по логике) -- обязательное условие контрольной задачи.
<xsl:template name="tree">
<xsl: param name="nodes"/>
<xsl:if test="$nodes">
<ul>
<xsl:for-each select="$nodes">
<!-- содержание узла -->
<li><xsl:value-of select="."/>
<!-- рекурсивный вызов -->
<xsl:call-template name="tree">
<xsl:with-param name="nodes" select="node"/>
</xsl:call-template>
</li>
</xsl:for-each>
</ul>
</xsl:if>
</xsl:template>
<xsl:call-template name="tree">
<xsl:with-param name="nodes" select="/site/tree/node"/>
</xsl:call-template>
Ты вообще за белых или за красных? Мы здесь за то, чтобы шаблон был очевиден. Про реюзабильность никто пока ничего не говорил и в условие не выставлял.Ага, а как же повторное использование кода?
Это почему же не надо? И чем это они ограничивают повторное использование?Автор оригинала: atv
Ещё раз повторю, не нужно никаких циклов для отображения XML данных, это ограничивает повторное использование шаблонов.
У очевидности бывают разные границы. Самым очевидным будет PHP код в перемешку с HTML в пределах 100 строчек. Больше этого количества очевидность уже теряется. Приходиться как-то структурировать код, а очевидность уже будет опираться не только на видимое представление, но и на правила структурирования, которые необходимо в этом случае знать.Ты вообще за белых или за красных? Мы здесь за то, чтобы шаблон был очевиден. Про реюзабильность никто пока ничего не говорил и в условие не выставлял.
class XSLTProcessor
{
function applyTemplates($select) {...}
function valueOf($select) {...}
function forEach($select) {...}
function transform($inputData, $template) {...}
}
Правила эти очень простые: взять корневой элемент входных данных и найти для него шаблон преобразования, поиск производиться по типу элемента. Если шаблон не найден, то всё, преобразование закончено. Если найден обрабатывается шаблон.в) шаблонные правила, которые в зависимости от разметки преобразуют шаблон.
class XSLTProcessor
{
function transform($inputData, $template)
{
if ($this->isTemplateExists($inputData->getRoot())) {
$this->applayTemplates($inputData->getRoot());
}
}
}
class XSLTTemplate
{
function rootTemplate($inputData)
{
print '<html>';
$this->xslt->applyTemplates($inputData->getChildrens());
print '</html>';
}
function selectTemplate($inputData) {...}
function inputTemplate($inputData) {...}
// и т.д.
}
Это не так. Шаблоны на Смарти, даже достаточно сложные, вполне понятны новичку. Я в свое время разбирался со Смарти по примерам, без какой-либо документации. В случае XSLT такой номер не пройдет.У очевидности бывают разные границы. Самым очевидным будет PHP код в перемешку с HTML в пределах 100 строчек. Больше этого количества очевидность уже теряется.
Используя рекурсию. А рекурсия зашита в:я не понимаю, как можно собрать таблицу с данными, не используя итератор.
См. предыдущий мой пост.в) шаблонные правила, которые в зависимости от разметки преобразуют шаблон.
Пройдёт, главное разобраться с правилом обработки шаблона, а оно очень простое.В случае XSLT такой номер не пройдет.
Ага. А затем это нужно объяснить верстальщику, который в лучшем случае знаком с основами php...Автор оригинала: atv
Пройдёт, главное разобраться с правилом обработки шаблона, а оно очень простое.
Приведенная выше аналогия использовалась для объяснения программистам а не верстальщикам, для верстальщика используются другие объяснения, и PHP ему не нужен.Ага. А затем это нужно объяснить верстальщику, который в лучшем случае знаком с основами php
Сегодня нанимать верстальщика без базового знания PHP себе дороже...Автор оригинала: atv
Приведенная выше аналогия использовалась для объяснения программистам а не верстальщикам, для верстальщика используются другие объяснения, и PHP ему не нужен.
В вызове "$this->xslt->applyTemplates($inputData->getChildrens());" присутствует и рекурсия и итерация. Просто вложенной итерации нет, она заменена рекурсией.Рекурсию?? Это было неожиданно
Проверки можно разместить на многих уровнях приложения, не только в шаблонизаторе. Вопрос в том, какая проверка на каком уровне уместна. Контроль входных данных, по моему, не совсем уместная задача для шаблонизатора.Допустим, для одной строки одно из полей вычислено не было, отсутствует. В нормальном шаблонизаторе будет выведена пустая ячейка таблицы + notice о не найденном индексе массива. В XSLT, похоже, ячейка будет попросту пропущена, и таблица разъедется без каких-либо сообщений об ошибках.
А как верстальщику это объяснить? Вот подготовил верстальщик верстку. Программист превратил их в шаблоны. Завтра говорят верстальщику. Вот мы добавили новую фишку на сайт. Оформи ее. Он открывает шаблон и вместо своей верстки видит мешанину ввиде <apply-templates> и <templates>. Как ему объяснить как они взаимодействуют?Автор оригинала: atv
Приведенная выше аналогия использовалась для объяснения программистам а не верстальщикам, для верстальщика используются другие объяснения, и PHP ему не нужен.
Кстати, именно по этой причине я когда-то отказался от этих apply-templates. Когда шаблоны становятся сложнее, чем "меню справа-по середине текст", apply-templates начинают конфликтовать друг с другом самым наглым образом. А @mode вносят в эту мешанину ещё больше хаоса. И ни как не способствуют "повторному использованию шаблонов".Автор оригинала: Dagdamor
Имхо, это порочный подход. Шаблонизатор должен быть устроен так, чтобы диктовать правила отображения данных, а не зависеть от их структуры. Другими словами, должна быть система "шаг влево, шаг вправо - стреляю".
...
Дело в том, что у нас в компании такое разделение труда:
Автор оригинала: pachanga
Сегодня нанимать верстальщика без базового знания PHP себе дороже...
У нас все точно также, однако вот именно на этом шаге верстальщику обычно требуются базовые знания PHP, чтобы он не отвлекал программистов или банально не накосячил в шаблонах....
4) затем верстальщик может привлекаться для окончательной доводки сайта до кондиции. А также при добавлении новой функциональности, когда ее нужно оформить.