я вот непомнимаю - хули тебе нормальные шаблонизаторы не нравятся?))
Покажи мне нормальный
нативный шаблонизатор. Чем не нравятся остальные — написано во вступлении (второй абзац).
Во-вторых, в шаблонизаторе не должно быть доступа к переменным, которые в него не переданы, и к функциям, которые в нем не определены.
Я бы не был столь категоричным. Я бы в шаблонизаторе поставил "защиту от дурака". "Если ты добираешься до непереданных тебе значений - делай это сознательно". Шаблонизатор содержит логику … пусть она "всего-лишь логика отображения", но и ей могут понадобится различные данные .. не обязательно для отображения … пусть только для анализа.
Если могут понадобиться какие-то значения, разработчик должен знать о том, что они понадобятся, уже в контроллере.
Не проникся фильтрацией тегов. bb-code привычней.
Не перевариваю бб-коды. Какое-то не рыба, не мясо. Недоделанное что-то, и, самое интересное, не понятно, зачем оно надо.
Я бы указал типы результатов … зачем зря читателя напрягать (а ещё лучше пример возвр. значений)
Не понял к чему это.
Почему в контроллере решаем, что будет подключать шаблонизатор ?
И в итоге почти все контроллеры почти всегда стартуют из index.tpl.php
Смешиваем логики C и V. Или нет?
Нет. В контроллере решаем, что подключать. В index.tpl.php только подключаем. Где там контроллеры?
Потенциальная дыра.
Отстегиваем страховку и надеемся только на самого себя - экстремал.
Отключать XSS-защиту приходится, ибо в значении, наверно, теги встречаются?
По-умолчанию она включена. Отключить ее можно, например, чтобы вывести текст, добавленный админом, в котором злобных xss быть не должно.
Может лучше пусть раскрывает массив значений в переменные?
будет не $this->articles['content'], а articles['content']
Возможно. Подумаю над этим.
Я бы поменял параметры местами и Format установил бы тоже значение по умолчанию, а для $timestamp: "не указан или null -> текущее время"
И какой же формат поставить по-умолчанию?
Расширил бы до возможности принимать ассоц. массивы [name] => value.
Если я правильно понял, чтобы каждый элемент массива становился отдельной переменной? А как быть, если нужно передать именно массив?))
Основная идея шаблонизатора: впихнуть нужные значения в существующий шаблон. Получается, что мы не ждем HTML-кода в значениях и всячески от него там избавляемся (XSS). Тут мы озадачиваеся не просто защитой, а обработкой кода (string tagsParser(string $str);) …похоже на игру со спичками на автозаправке заправке.
В общем … не проникся я идеей tagsParser и компании.
Не уловил, в чем тут игра со спичками.
"Хелперы" ( # morph / морфологически правильное окончание слова # formatDate / форматировать дату # getRuMonth / русское название месяца) это хорошо. Надоть развивать это направление.
Это развивается в процессе нужды) Как появится что-то необходимое в процессе работы, так и добавляю.
ахуенный шаблонизатор придумали мы с аретдоо, там и хсс хорошо обрабатывается и прочие вещи куда удобнее и лаконичнее.
мне не похуй что написать.
у меня вот так
Избыточный псевдоязык? Спасибо, нет. Зачем мне учить твои конструкции, если есть php? Может ты еще все функции переопределишь? Нахуй писать htmlspecialchars, если можно написать hsc()? Нахуй писать echo, если можно написать e? Нахуй писать <html>, если можно написать <h>?)))
[. header.tpl] - подключить шапку. ахуенна не правда ли? всяко лучше чем $stemp->setIncludeFile("article.tpl.php"); + его обработка в шаблоне.
Просто $this->includeFile('header.tpl') в шаблоне.
[::$var ] = urlencode. пиздатенько, не правда ли?
Хуйня) Непонятно, почему так, поэтому хуй запомнишь, + нечитабельно.
в списке методов нету __set но есть __get настораживает
Чем? По этому поводу я уже объяснял. Я не использую __set чтобы подчеркнуть передачу переменной.
$article = $blog->getArticle($_GET["article_id"]);
$comments = $blog->getCommentsToArticle($article["id"]);
у тебя странный стиль разве $_GET["article_id"] != $article["id"] ?
удивляет
Это же пример блядь)
<?php echo $this->title ?>
просто убило. что незя было сделать {$page->title}
дальше не читал
Нельзя. Это нарушает идеологию шаблонизатора. Он
нативный, и никаких излишних синтаксисов в нем не будет.
Откуда появляются дыры в сайтах? От "недофильтрования".
У шаблонизатора не должно быть функции [:name] или ещё как … "вернуть_htmlscpecialchars(name)" …
у него, допустима функция дай_НЕфильтрованное_значение($name) … и второй параметр, желателен … строковый, который всегда обязателен и должен равняться "Я осознаю, что я прошу и беру ответственность на себя. Я трезв и не хочу спать".
Шаблонизатор всегда должен отдавать защищенные данные … и только по сильному требованию - НЕзащищенные.
А варианты [name] и [:name] – прямой путь к ошибке по недосмотру или запавшей кнопке.
Все настраиваемо. По-умолчанию, все переменные обрабатываются перед отдачей. Если админ дурак и отрубит защиту там, где это не нужно — то тут уже ничем не поможешь.
Спустя 42 сек.
Блядь, тут еще и вторая страница!!!