Форум → Программирование → Пыхнуть хотите? → Готовые решения → Мой нативный шаблонизатор STemp 2.0
Мой нативный шаблонизатор STemp 2.0
-
-
10 сентября 2009 г. 8:32, спустя 28 минут 7 секунд
я вот непомнимаю - хули тебе нормальные шаблонизаторы не нравятся?))Сапожник без сапог -
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 сек.
Потому что "человек разумный"
я вот непомнимаю - хули тебе нормальные шаблонизаторы не нравятся?)) -
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
зы: против тебя я ничего не имею :)Сапожник без сапог -
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}
дальше не читал -
10 сентября 2009 г. 9:24, спустя 3 минуты 49 секунд
CTAPbIu_MABP, так это же нативный шабонизатор то<?php echo $this->title ?>
просто убило. что незя было сделать {$page->title}
дальше не читал
этого в нем никогда! не быдет :DСапожник без сапог -
10 сентября 2009 г. 10:12, спустя 47 минут 57 секунд
Откуда появляются дыры в сайтах? От "недофильтрования".
У шаблонизатора не должно быть функции [:name] или ещё как … "вернуть_htmlscpecialchars(name)" …
у него, допустима функция дай_НЕфильтрованное_значение($name) … и второй параметр, желателен … строковый, который всегда обязателен и должен равняться "Я осознаю, что я прошу и беру ответственность на себя. Я трезв и не хочу спать".
Шаблонизатор всегда должен отдавать защищенные данные … и только по сильному требованию - НЕзащищенные.
А варианты [name] и [:name] – прямой путь к ошибке по недосмотру или запавшей кнопке. -
-
10 сентября 2009 г. 12:47, спустя 14 минут 15 секунд
AndryG максималист :)
а как насчет такого: есть несколько шаблонов для "блоков" или "виджетов" и один для "лэйаута".
сначала генерится содержимое блоков, потом блоки подставляются в макет страницы как "переменные".
если фильтровать ВСЕ теги, то получится хуйня. надо фильтровать там, где явно указано!ιιlllιlllι унц-унц -
-
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]);
}
}
во вложении пример как раз про лэйаут и выборочное фильтрованиеιιlllιlllι унц-унц -
10 сентября 2009 г. 13:14, спустя 23 часа 59 минут 46 секунд
чувствую это опять на 10 страниц)все умрут, а я изумруд -
10 сентября 2009 г. 15:50, спустя 2 часа 36 минут 31 секунду
md5, чувствую я сапа забаню еще на 5ой :D -
10 сентября 2009 г. 15:52, спустя 1 минуту 45 секунд
Как же вы любите банить….https://smappi.org/ - платформа по созданию API на все случаи жизни -
Пожалуйста, авторизуйтесь, чтобы написать комментарий!