ФорумПрограммированиеПыхнуть хотите?Готовые решения → Мой нативный шаблонизатор STemp 2.0

Мой нативный шаблонизатор STemp 2.0

  • sap

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

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

    Spritz 10 сентября 2009 г. 8:32, спустя 28 минут 7 секунд

    я вот непомнимаю - хули тебе нормальные шаблонизаторы не нравятся?))
    Сапожник без сапог
  • AndryG

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

    Spritz 10 сентября 2009 г. 9:06, спустя 33 минуты 57 секунд

    Во-вторых, в шаблонизаторе не должно быть доступа к переменным, которые в него не переданы, и к функциям, которые в нем не определены.
    Я бы не был столь категоричным. Я бы в шаблонизаторе поставил "защиту от дурака". "Если ты добираешься до непереданных тебе значений - делай это сознательно". Шаблонизатор содержит логику … пусть она "всего-лишь логика отображения", но и ей могут понадобится различные данные .. не обязательно для отображения … пусть только для анализа.

    Не проникся фильтрацией тегов. bb-code привычней.

    Я бы указал типы результатов … зачем зря читателя напрягать (а ещё лучше пример возвр. значений)

    $article = $blog->getArticle($_GET["article_id"]);
    $comments = $blog->getCommentsToArticle($article["id"]);


    Почему в контроллере решаем, что будет подключать шаблонизатор ?
    И в итоге почти все контроллеры почти всегда стартуют из index.tpl.php
    Смешиваем логики C и V. Или нет?

    // устанавливаем подключаемый файл
    // разумеется, на других страницах этот файл мог бы быть другим
    $stemp->setIncludeFile("article.tpl.php");

    …..

    // отображаем основной шаблон, изменяемая часть будет подключена автоматически
       $stemp->display("index.tpl.php");


    Потенциальная дыра.
    Отстегиваем страховку и надеемся только на самого себя - экстремал.
    Отключать XSS-защиту приходится, ибо в значении, наверно,  теги встречаются?
        <?php $this->setParam("xss_protection", false) ?>
       <?php echo $this->article["content"] ?>



    Может лучше пусть раскрывает массив значений в переменные?
    mixed __get(string $name);

    будет не $this->articles['content'], а articles['content']

    Я бы поменял параметры местами и Format установил бы тоже значение по умолчанию, а для $timestamp: "не указан или null -> текущее время"
    string formatDate(string $format [, int $timestamp]);


    Расширил бы до возможности принимать ассоц. массивы [name] => value.
    void assign(string $name, mixed $value);


    Общее впечатление.
    Основная идея шаблонизатора: впихнуть нужные значения в существующий шаблон. Получается, что мы не ждем HTML-кода в значениях и всячески от него там избавляемся (XSS). Тут мы озадачиваеся не просто защитой, а обработкой кода (string tagsParser(string $str);) …похоже на игру со спичками на автозаправке заправке.
    В общем … не проникся я идеей tagsParser и компании.

    Шаблонизатор поддерживает идею "покирпичной сборки итогового кода". Но возможность заказать для вставки только один шаблон … настораживает. Для меня необычен метод сборки шаблона "указываем, что будет внутри, а потом решаем, в чем именно оно будет"

    "Хелперы" ( # morph / морфологически правильное окончание слова # formatDate / форматировать дату # getRuMonth / русское название месяца) это хорошо. Надоть развивать это направление.



    Спустя 38 сек.

    я вот непомнимаю - хули тебе нормальные шаблонизаторы не нравятся?))
    Потому что "человек разумный"
  • phpdude

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

    Spritz 10 сентября 2009 г. 9:14, спустя 7 минут 40 секунд

    ахуенный шаблонизатор придумали мы с аретдоо, там и хсс хорошо обрабатывается и прочие вещи куда удобнее и лаконичнее.

    мне не похуй что написать.

    у меня вот так

    [. header.tpl] - подключить шапку. ахуенна не правда ли? всяко лучше чем $stemp->setIncludeFile("article.tpl.php"); + его обработка в шаблоне.

    [$var] | [var] = echo. ахуенно, всяко лучше чем <? echo $this->var ?>

    [:$var] = htmlscpecialchars(echo). вот те хсс.

    [::$var ] = urlencode. пиздатенько, не правда ли?

    [?items]
    [&items]
    <li>[item.name]
    [/&]
    [/?]



    <?if ($items) : ?>
    <?foreach($items as $item): ?>
    <li><? echo $item ?></li>
    <?endfor?>
    <?endif?>


    5 символов и ты на коне, в общем сап я считаю твой шаблонизатор - НЕЗАЧЕТ2.0

    зы: против тебя я ничего не имею :)
    Сапожник без сапог
  • Trej Gun

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

    Spritz 10 сентября 2009 г. 9:21, спустя 6 минут 47 секунд

    то что увидел за 2 секунды

    в списке методов нету __set но есть __get настораживает


    $article = $blog->getArticle($_GET["article_id"]);
    $comments = $blog->getCommentsToArticle($article["id"]);


    у тебя странный стиль разве $_GET["article_id"] != $article["id"] ?
    удивляет

    <?php echo $this->title ?>

    просто убило. что незя было сделать {$page->title}

    дальше не читал
  • phpdude

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

    Spritz 10 сентября 2009 г. 9:24, спустя 3 минуты 49 секунд

    CTAPbIu_MABP, так это же нативный шабонизатор то

    <?php echo $this->title ?>
    просто убило. что незя было сделать {$page->title}

    дальше не читал


    этого в нем никогда! не быдет :D
    Сапожник без сапог
  • AndryG

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

    Spritz 10 сентября 2009 г. 10:12, спустя 47 минут 57 секунд

    Откуда появляются дыры в сайтах? От "недофильтрования".

    У шаблонизатора не должно быть функции [:name] или ещё как … "вернуть_htmlscpecialchars(name)" …
    у него, допустима функция дай_НЕфильтрованное_значение($name) … и второй параметр, желателен … строковый, который всегда обязателен и должен равняться "Я осознаю, что я прошу и беру ответственность на себя. Я трезв и не хочу спать".

    Шаблонизатор всегда должен отдавать защищенные данные … и только по сильному требованию - НЕзащищенные.

    А варианты [name] и [:name] – прямой путь к ошибке по недосмотру или запавшей кнопке.

  • Trej Gun

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

    Spritz 10 сентября 2009 г. 12:32, спустя 2 часа 19 минут 57 секунд

    phpdude, ой простите был напуган
  • artoodetoo

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

    Spritz 10 сентября 2009 г. 12:47, спустя 14 минут 15 секунд

    AndryG максималист :)

    а как насчет такого: есть несколько шаблонов для "блоков" или "виджетов" и один для "лэйаута".
    сначала генерится содержимое блоков, потом блоки подставляются в макет страницы как "переменные".
    если фильтровать ВСЕ теги, то получится хуйня. надо фильтровать там, где явно указано!
    ιιlllιlllι унц-унц
  • sap

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

    Spritz 10 сентября 2009 г. 13:03, спустя 16 минут 41 секунду

    Завтра отвечу)
  • artoodetoo

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

    Spritz 10 сентября 2009 г. 13:14, спустя 10 минут 42 секунды

    до кучи свой нативный шаблонизатор представлю. придуман буквально недавно


    class MyView
    {
    public static function render($viewId, $viewData)
    {
    self::$_data = &$viewData;
    extract($viewData, EXTR_REFS);
    require SITE_ROOT.'views/'.$viewId.'.php';
    }

    public static function fetch($viewId, $viewData)
    {
    ob_start();
    self::render($viewId, $viewData);
    return ob_get_clean();
    }

    private static $_data;

    private static function _escape()
    {
    foreach (func_get_args() as $key)
    self::$_data[$key] = htmlspecialchars(self::$_data[$key]);
    }

    }


    во вложении пример как раз про лэйаут и выборочное фильтрование
    1. myview.zip (66)
    ιιlllιlllι унц-унц
  • md5

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

    Spritz 10 сентября 2009 г. 13:14, спустя 23 часа 59 минут 46 секунд

    чувствую это опять на 10 страниц)
    все умрут, а я изумруд
  • Trej Gun

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

    Spritz 10 сентября 2009 г. 15:50, спустя 2 часа 36 минут 31 секунду

    md5, чувствую я сапа забаню еще на 5ой :D
  • adw0rd

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

    Spritz 10 сентября 2009 г. 15:52, спустя 1 минуту 45 секунд

    Как же вы любите банить….
    adw/0
  • Trej Gun

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

    Spritz 10 сентября 2009 г. 16:06, спустя 13 минут 39 секунд

    adw0rd, ага тока не получается

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