ФорумПрограммированиеПыхнуть хотите?F.A.Q. → О шаблонных механизмах. XTemplate.

О шаблонных механизмах. XTemplate.

  • md5

    Сообщения: 11951 Репутация: N Группа: в ухо

    Spritz 26 марта 2008 г. 4:03, спустя 32 минуты 46 секунд

    кстати говоря, первый шаблонизатор, который я встретил, был как раз таки X-Template… но боюсь тогда оно мне нафиг не надо было)
    все умрут, а я изумруд
  • mechanic

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 26 марта 2008 г. 5:40, спустя 1 час 36 минут 57 секунд


    Возможно имеет смысл какой-нибудь FAQ краткий набросать.

    хотя бы фак, да.. ибо спецификацию новичкам сложновато будет грызть
  • AlexB

    Сообщения: 4288 Репутация: N Группа: в ухо

    Spritz 26 марта 2008 г. 5:54, спустя 13 минут 48 секунд

    Да мне не совсем понятно в какой задаче новички смогут применить XSLT преобразования.
  • kendo

    Сообщения: 446 Репутация: N Группа: Адекваты

    Spritz 27 марта 2008 г. 5:21, спустя 23 часа 27 минут 25 секунд

    Эмм, полагаю XSLT не совсем в теме, ведь он обрабатывается браузером, не скриптом.
  • AlexB

    Сообщения: 4288 Репутация: N Группа: в ухо

    Spritz 27 марта 2008 г. 5:45, спустя 23 минуты 36 секунд


    Эмм, полагаю XSLT не совсем в теме, ведь он обрабатывается браузером, не скриптом.
    Ну это все девичьи фантазии :)
    Гляди сюда:
    http://ru2.php.net/manual/ru/ref.xsl.php

    Кстати, "XSLT обрабатывается" крайне корявое сочетание.
  • sap

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 23 апреля 2008 г. 11:00, спустя 27 дней 5 часов 14 минут

    Попробуем теперь сделать нативный шаблон. Честное слово, я старался писать как можно компактнее, но тем не менее у меня получилось вот что:

    <table cellpadding=&quot;3&quot;>
    <?php
    for($i=0; $i<sizeof($teams)/3; $i++)
    {
    ?>
    <tr>
    <?php
    for($j=0; $j<3; $j++)
    {
    $index = $i*3 + $j;
    if ($index >= sizeof($teams)) break;
    ?>
    <td><b><?php echo $teams[$index][&#39;name&#39;] ?></b></td>
    <?php
    }
    ?>
    </tr>
    <tr>
    <?php
    for($j=0; $j<3; $j++)
    {
    $index = $i*3 + $j;
    if ($index >= sizeof($teams)) break;
    ?>
    <td><?php echo $teams[$index][&#39;city&#39;] ?><br><br></td>
    <?php
    }
    ?>
    </tr>
    <?php
    }
    ?>
    </table>


    Ну на самом деле можно это сделать гораздо красивее, например так:

    <table cellpadding=&quot;3&quot;>
    <?for($i=0; $i<sizeof($teams); $i+=3):?>
    <tr>
    <?for($j=$i; $j<$i+3; $j++):?>
    <td><b><?=$teams[$j][&#39;name&#39;]?></b></td>
    <?endfor?>
    </tr>
    <tr>
    <?for($j=$i; $j<$i+3; $j++):?>
    <td><b><?=$teams[$j][&#39;city&#39;]?></b></td>
    <?endfor?>
    </tr>
    <?endfor?>
    </table>


    Да, в принципе, остаются те же три цикла. Но - при использовании блочного шаблонизатора, разве на самом деле, при генерации страницы не будет тех же самых циклов?
  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 23 апреля 2008 г. 13:28, спустя 2 часа 28 минут 24 секунды

    sap, при использовании &quot;коротких тегов&quot; проблем еще не было?) допустим со строчкой &quot;&lt;?xml&quot;…
    adw/0
  • sap

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 23 апреля 2008 г. 13:41, спустя 13 минут 27 секунд

    sap, при использовании &quot;коротких тегов&quot; проблем еще не было?)

    Были =) Но это уже другой вопрос.
  • AlexB

    Сообщения: 4288 Репутация: N Группа: в ухо

    Spritz 23 апреля 2008 г. 14:01, спустя 19 минут 26 секунд


    Ну на самом деле можно это сделать гораздо красивее

    Да примерно то же самое. Ну немного компактнее, засчет применения нетрадиционной формы записи без фигурных скобочек и коротких тегов. Это очень сильно на любителя. Куча людей будет плеваться. Также выкинута проверка на некратное число комманд, что пораждает варнинг.

    Но - при использовании блочного шаблонизатора, разве на самом деле, при генерации страницы не будет тех же самых циклов?
    Ты еще на уровне машинных кодов пересчитай операции. Причем тут сколько циклов будет в шаблонном движке? На то он и движок, чтобы освобождать нас от ручного написания этих циклов и делать наш код прозрачным, засчет того, что перебираем в одном цикле напрямую сущности (команды), а не абстрактные i и j.

    А потом, данный скрипт всего лишь тестовый пример, который показывает, что нативные шаблоны далеко не всегда так просты и прозрачны, как это расписывается в различных статьях, где рассматривают только банальный &lt;?php echo ?> Чуть усложнилась верстка - и нате получите кучу вложенных циклов. А в реальной жизни верстка куда как посложней бывает. Я уж молчу про деревья, где в шаблон переползет рекурсия. (В следующей статье поподробней остановлюсь на этом моменте).
  • sap

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 23 апреля 2008 г. 14:24, спустя 23 минуты 13 секунд

    Это очень сильно на любителя. Куча людей будет плеваться.

    Ну так можно про что угодно сказать.

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

    Опять же - кому как удобнее. Лично мне проще оперировать циклами, чем блоками.

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

    Вот как раз очень интересный момент. Приходилось делать подобное, получалось очень некрасиво (на нативных шаблонах, на Smarty, если честно, вообще этого не представляю). Так что жду с нетерпением =)
  • AlexB

    Сообщения: 4288 Репутация: N Группа: в ухо

    Spritz 23 апреля 2008 г. 14:34, спустя 9 минут 33 секунды


    Опять же - кому как удобнее. Лично мне проще оперировать циклами, чем блоками.
    Если удобней писать три (а то и больше, см. статью) цикла вместо одного, то тогда конечно. Тут просто разные представления об удобстве. ))
  • sap

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 23 апреля 2008 г. 18:36, спустя 4 часа 2 минуты 40 секунд

    Вот пришло в голову. Допустим, есть список категорий (например, в массиве). При верстке список выглядит как меню. Соответственно, можно просматривать содержимое категорий. Активная категория, само собой, должна быть выделена и не должна быть ссылкой, все остальные - ссылки. При использовании нативных шаблонов это выглядит примерно так:

    Контролер:
    $categories = array (
    array (&#39;id&#39; => &#39;1&#39;, &#39;title&#39; => &#39;Category1&#39;),
    array (&#39;id&#39; => &#39;2&#39;, &#39;title&#39; => &#39;Category2&#39;),
    array (&#39;id&#39; => &#39;3&#39;, &#39;title&#39; => &#39;Category3&#39;)
    );
    $template->assign (&quot;categories&quot;, $categories);
    $template->assign (&quot;selected_category&quot;, $_GET[&#39;category&#39;]);


    Шаблон:
    <table border=&quot;0&quot; width=&quot;100&quot;>
    <?for ($i=0; $i<count($categories); $i++):?>
    <tr><td>
    <?if ($categories[$i][&#39;id&#39;] != $selected_category):?>
    <a href=&quot;/category/<?=$categories[$i][&#39;id&#39;]?>&quot;><?=$categories[$i][&#39;title&#39;]?></a>
    <?else:?>
    <b><?=$categories[$i][&#39;title&#39;]?></b>
    <?endif?>
    </td></tr>
    <?endfor?>
    </table>


    Как это реализовать с использованием блочного шаблонизатора? Делать для каждой категории отдельный шаблон? Или приписывать теги еще в контроллере?
  • AlexB

    Сообщения: 4288 Репутация: N Группа: в ухо

    Spritz 24 апреля 2008 г. 4:27, спустя 9 часов 50 минут 17 секунд


    &lt;!– BEGIN:item –>
    &lt;tr>
    &lt;td>
    &lt;!– BEGIN:link –>
    &lt;a href=&quot;/category/{cat.id}&quot;>{cat.title}&lt;/a>
    &lt;!– END:link –>

    &lt;!– BEGIN:nolink –>
    &lt;b>{cat.title}&lt;/b>
    &lt;!– END:nolink –>
    &lt;/td>
    &lt;/tr>
    &lt;!– END:item –>
  • sap

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 24 апреля 2008 г. 6:05, спустя 1 час 38 минут 5 секунд

    Убедил =)

    UPD. Хотя, таки нет)
  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты

    Spritz 4 июня 2008 г. 7:55, спустя 41 день 1 час 50 минут

    Я честно под*аеьался с этим XTemplate.

    Вопросы

    $xtpl->assign_file(&#39;inside&#39;, &#39;templates/inside.xtpl&#39;)

    переменная должна называться именно inside как и название файла?

    &lt;!– BEGIN:index–>
    {FILE {structure}}
    &lt;!– END:index –>

    не срабатывает ($xtpl->assign_file прописываю, путь верный)

    Файл structure.xtpl, а именно родительский блок называет тоже - index. Может быть из за этого?

    Если я допустим подключаю файл шапка.xtpl, а шапка у меня динамическая. То тут как быть?

Пожалуйста, авторизуйтесь, чтобы написать комментарий!