ФорумПрограммированиеPHP для идиотовРасширения PHP → Smarty и кто его использует

Smarty и кто его использует

  • AlexB

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

    Spritz 24 февраля 2008 г. 6:31, спустя 14 минут 14 секунд


    AlexB, ну давай на примере, чтоли…
    Дык, я сказал, что для того, чтоб в шаблонах не было наворотов надо использовать шаблонизаторы "блочного типа". Из того, что попадалось Blitz - лучшее. Примеры его использования есть по ссылке.
    S.A.P. сказал, что склоняется к нативным шаблонам. Я привел пример, показывающий слабые места этого подхода. Если кто-то знает, как эффективно использовать нативные шаблоны, то буду рад услышать и увидеть примеры :). У меня лично не получилось, код всегда превращался в страшное спагетти …

    Кстати, между Смарти и нативными шаблонами разницы не вижу. Смарти - это тоже самое пхп написанное на пхп. Только более убогое … :)

  • md5

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

    Spritz 24 февраля 2008 г. 6:44, спустя 12 минут 12 секунд

    ну вот возьмем шаблон статей пыхи

    <h1><?php print $tpl['article']['title']; ?></h1>

    <?php print $tpl['article']['text']; ?>

    <br /><br /><br />

    <strong>О статье:</strong>

    <dl>
    <dt>Автор:</dt><dd><a href="http://pyha.ru/forum/profile/<?php print $tpl['article']['user_id']; ?>"><?php print $tpl['article']['userName']; ?></a></dd>
    <dt>Дата:</dt><dd><?php print $tpl['article']['date']; ?></dd>
    <dt>Обсуждение на форуме:</dt><dd><a href="<?php print $tpl['article']['forum_url']; ?>"><?php print $tpl['article']['forum_url']; ?></a></dd>
    <dt>BB-код:</dt><dd class="bbcode"><span>[url=http://pyha.ru<?php print $tpl['url']; ?>]<?php print $tpl['article']['title']; ?></span></dd>
    </dl>

    впринципе не такие уж и спагетти, но спускаемся ниже…

    <?php

    $bbc = $tpl['article']['bb_codes'];
    if (!empty($bbc)) {
    ?>
    <br /><br />
    <strong>Дополнительные ББ-коды:</strong>
    <ul class="dop_bbc">
    <?php
    $bbc_s = explode("\n", $bbc);
    foreach ($bbc_s as $bbc) {
    list ($anchor, $anchor_title) = explode("|", trim($bbc));
    print '<li>' . $tpl['article']['title'] . ' &mdash; ' . $anchor_title . '</li>';
    }
    ?>
    </ul>
    <?php
    }

    ?>

    это мне уже не нравится, хотя можно было подготовить доп. урлы на стороне оброботчика а в шаблоне просто форичем пройти…

    вобщем, ничего однозначного нет, всё спорно..
    все умрут, а я изумруд
  • AlexB

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

    Spritz 24 февраля 2008 г. 7:57, спустя 1 час 13 минут 15 секунд

    впринципе не такие уж и спагетти
    Код превращается в спагетти с ростом проекта. Тут простейший случай, не является критерием.

    это мне уже не нравится, хотя можно было подготовить доп. урлы на стороне оброботчика а в шаблоне просто форичем пройти…
    Можно, но мне не нравится сам факт, что что-то надо предварительно готовить. Т.е. фактически вместо одного цикла, получается два по одному и тому же. Плюс лишние промежуточные переменные.

    Ну и вообще, данный пример никак не предлагает решение проблемы с title-ом. :)

  • md5

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

    Spritz 24 февраля 2008 г. 9:04, спустя 1 час 6 минут 55 секунд

    а какая собственно у нас проблема с тайтлом? О_о
    все умрут, а я изумруд
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 24 февраля 2008 г. 9:39, спустя 35 минут 14 секунд

    я использую нативные шаблоны, только вместо <?php и ?> у меня {* и *}, чтобы при просмотре шаблона было видно все теги…
  • AlexB

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

    Spritz 24 февраля 2008 г. 9:46, спустя 6 минут 35 секунд

    Lirck, давай определимся с терминологией. Под нативными мы понимаем (во всяком случае именно это имел в виду в данной ветке) шаблоны написанные в синтаксисе чистого php. А что ты вкладываешь в это понятие?
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 24 февраля 2008 г. 9:47, спустя 1 минуту 32 секунды

    синтаксис то остается прежним, только теги изменились и все…
  • AlexB

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

    Spritz 24 февраля 2008 г. 9:52, спустя 4 минуты 27 секунд


    синтаксис то остается прежним, только теги изменились и все…

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

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 24 февраля 2008 г. 9:57, спустя 5 минут 18 секунд

    Короче говоря я использую свои странно-нативно-хз какие шаблоны которые имеют вид обычного PHP кода + одна user функция – вместо include использую inc:
    Вот пример шаблона:
    <html>
    <head>
    <title>{*=$title*}</title>
    </head>
    <body>
    {*='content'*}
    </body>
    </html>


    а вот главный файл:

    $index['title'] = 'TITLE';
    echo parse_template('index', 'templates/', $index);


    ответ на 2-ой вопрос - чтобы при просмотре шаблона через браузер было видно все теги…
    3-й - повторяющиеся фрагменты это include? Я использую вместо include свою:

    function inc($path)
    {
    echo parse_template($path, 'templates/');
    }


    4-й - нативный - врожденный (оригинальный)
  • AlexB

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

    Spritz 24 февраля 2008 г. 10:07, спустя 10 минут 2 секунды

    1. Нахрена смотреть шаблон, через браузер? Через браузер надо смотреть результат парсинга.
    2. Под повторяющимися фрагментами, я имею ввиду например список из 100 новостей.
    3. По поводу ответа на 4-й вопрос, убедительно прошу не валять ваньку.
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 24 февраля 2008 г. 10:15, спустя 7 минут 37 секунд

    вот модуль вывода коротких новостей:

    <?php
    if (!defined("PROTECTION"))
    {
    exit("Forbidden");
    }
    $news = array_reverse(readBase("news"));
    $config_news = readConfig("news");
    $news_posts = $config_news[0];
    $pager_now = $_GET['page'];
    $pager_all = ceil(count($news)/$news_posts);
    if (!is_numeric($pager_now))
    {
    $pager_now = 1;
    }
    if ($pager_now > $pager_all)
    {
    $pager_now = 1;
    }
    $news_start = ($pager_now - 1) * $news_posts;
    $news_count = $news_start;
    while ($news_start < $news_posts + $news_count)
    {
    if ($news[$news_start][0] != FALSE OR $news[$news_start][1] != FALSE OR $news[$news_start][2] != FALSE OR $news[$news_start][4] != FALSE)
    {
    $short = array('caption' => $news[$news_start][1],
    'content' => $news[$news_start][2],);
    $content .= parse_template('short', 'templates', $short);
    }
    $news_start++;
    }
    include("pager.php");
    ?>
  • AlexB

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

    Spritz 24 февраля 2008 г. 10:19, спустя 3 минуты 59 секунд

    Я правильно понял, что short это шаблон новости и он хранится в отдельном файле?
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 24 февраля 2008 г. 10:23, спустя 4 минуты 17 секунд

    правильно
  • AlexB

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

    Spritz 24 февраля 2008 г. 10:27, спустя 4 минуты 36 секунд

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

    Все-таки я еще раз настоятельно рекомендую прочитать мою ссылку про Blitz, чтоб хоть какое-то сформировалось мнение как должен работать нормальный шаблонизатор.
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 24 февраля 2008 г. 10:31, спустя 3 минуты 38 секунд

    циклом в шаблоне можно…

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