Форум → Программирование → Пыхнуть хотите? → Готовые решения → STemp — мой шаблонизатор
STemp — мой шаблонизатор
Страницы: ← Предыдущая страница • Следующая страница →
-
14 декабря 2008 г. 22:41, спустя 35 секунд
слушайте оффтоп - "интересно стоит ли у кого нить на хостинге пхп3 все еще?" (:Сапожник без сапог -
15 декабря 2008 г. 0:41, спустя 1 час 59 минут 56 секунд
оффтоп - "я встречал пару месяцев назад, плюс там еще стоял 3-й МуСКЛ" -
15 декабря 2008 г. 0:43, спустя 1 минуту 41 секунду
пиздец))
оффтоп - "я встречал пару месяцев назад, плюс там еще стоял 3-й МуСКЛ"Сапожник без сапог -
15 декабря 2008 г. 2:18, спустя 1 час 35 минут 5 секунд
да, на прошлой работе я тоже так сказал тимлиду, но он сказал: "ниипёт и делай что хочешь, но чтоб к завтрашнему утру проект стоял и работал", и с этими словами он свалил домой, а я остался ипать хостеров чтоб включили 5-ый… -
15 декабря 2008 г. 3:09, спустя 51 минуту 7 секунд
NRG, жестко! Нахер такого тимлида!https://smappi.org/ - платформа по созданию API на все случаи жизни -
24 мая 2009 г. 12:52, спустя 160 дней 8 часов 42 минуты
Кстати, немного доработанная версия)class STemp
{
private $path;
private $template;
private $variables = array();
private $params = array(
'xss_protection' => false,
'exit_after_display' => true,
'endofline_to_br' => false,
'charset' => 'UTF-8'
);
private $include_file;
public function __construct($path = 'templates/')
{
$this->path = $path;
}
public function setParam($param, $value)
{
if (isset($this->params[$param])) {
$this->params[$param] = $value;
return true;
}
return false;
}
public function setIncludeFile($include_file)
{
$this->include_file = $this->path.$include_file;
if (!is_file($this->path.$include_file))
throw new STempException('Include file '.$this->include_file.' not exitst');
}
public function assign($name, $value)
{
$this->variables[$name] = $value;
}
public function display($template)
{
$this->template = $this->path.$template;
if (!is_file($this->template))
throw new STempException('Template file '.$template.' not exitst');
header("Content-type: text/html; charset=".$this->params['charset']);
require_once($this->template);
if ($this->params['exit_after_display'])
exit;
}
private function __get($name)
{
if (isset($this->variables[$name])) {
$variable = $this->variables[$name];
if ($this->params['xss_protection'])
$variable = $this->xssProtection($variable);
if ($this->params['endofline_to_br'])
$variable = $this->endoflineToBr($variable);
return $variable;
}
return false;
}
private function includeFile($include_file = null)
{
if ($include_file) {
$include_file = $this->path.$include_file;
if (!is_file($include_file))
throw new STempException('Include file '.$include_file.' not found');
require_once($include_file);
} else {
if (!is_file($this->include_file))
throw new STempException('Include file '.$this->include_file.' not found');
require_once($this->include_file);
}
}
private function morph($value, $word0, $word1, $word2, $separator = ' ')
{
if (preg_match('/1\d$/', $value))
return $value.$separator.$word2;
elseif (preg_match('/1$/', $value))
return $value.$separator.$word0;
elseif (preg_match('/(2|3|4)$/', $value))
return $value.$separator.$word1;
else
return $value.$separator.$word2;
}
private function formatDate($date)
{
return date("j", $date).' '.$this->getMonth(date("m", $date)).' '.date("Y", $date);
}
private function getMonth($month)
{
switch ($month)
{
case 1: return 'января';
break;
case 2: return 'февраля';
break;
case 3: return 'марта';
break;
case 4: return 'апреля';
break;
case 5: return 'мая';
break;
case 6: return 'июня';
break;
case 7: return 'июля';
break;
case 8: return 'августа';
break;
case 9: return 'сентября';
break;
case 10: return 'октября';
break;
case 11: return 'ноября';
break;
case 12: return 'декабря';
break;
default: return 'хуй знает чего';
break;
}
}
private function xssProtection($variable)
{
if (is_array($variable)) {
$protected = array();
foreach ($variable as $key=>$value)
$protected[$key] = $this->xssProtection($value);
return $protected;
}
return htmlspecialchars($variable);
}
private function endoflineToBr($variable)
{
if (is_array($variable)) {
$protected = array();
foreach ($variable as $key=>$value)
$protected[$key] = $this->endoflineToBr($value);
return $protected;
}
return nl2br($variable);
}
} -
24 мая 2009 г. 13:15, спустя 23 минуты 42 секунды
switch ($month)
{
case 1: return 'января';
break;
case 2: return 'февраля';
break;
case 3: return 'марта';
break;
case 4: return 'апреля';
break;
case 5: return 'мая';
break;
case 6: return 'июня';
break;
case 7: return 'июля';
break;
case 8: return 'августа';
break;
case 9: return 'сентября';
break;
case 10: return 'октября';
break;
case 11: return 'ноября';
break;
case 12: return 'декабря';
break;
default: return 'хуй знает чего';
break;
}
уууууууууу
Даже я так не пишу =)
а чем массивы не нравятся?
Кстати, пользуюсь твоим шаблонизатором.
правда много чего уже сам добавил =)
Спасибо. -
-
25 мая 2009 г. 4:35, спустя 15 часов 15 минут 25 секунд
…
«Магический» метод __get возвращает значение переданной в шаблон переменной. Если переменная не определена, возвращает false. В зависимости от параметров, переменные перед отдачей могут обрабатываться.
Шаблон index.tpl.php:<html>
<head>
<title><?php echo $this->title ?></title>
</head>
<body>
<?php $this->includeFile() ?>
</body>
</html>
У меня в шаблонизаторе работает вот такая штука:
protected function tpl_include($tpl_name){
extract($this->tpl_vars,EXTR_SKIP|EXTR_REFS,'_');
include(SPIDER_DIR_TPL.'/'.str_replace('_','/',$tpl_name).'.php');
}
и HTML превращается в:<title><?=$title?></title>
Код шаблона "выполняется" в пространстве имен этого самого метода. Таким макаром "как обычные" переменные ($var) видны только привязанные переменные.
Защита переменных (htmlspecialchars) обрабатывается на шаге добавления данных. -
-
25 мая 2009 г. 4:47, спустя 4 минуты 36 секунд
Код шаблона "выполняется" в пространстве имен этого самого метода. Таким макаром "как обычные" переменные ($var) видны только привязанные переменные.
Круто. Тоже хотел так сделать, но руки не доходили)Защита переменных (htmlspecialchars) обрабатывается на шаге добавления данных.
А если потом вдруг понадобится выводить их в другом виде? Или нужно выводить на одной странице зачаренные, а в админке, например, нет? -
25 мая 2009 г. 4:50, спустя 2 минуты 29 секунд
<title><?=$title?></title>
это гавно
и нативный синтаксис в принципе гавно
с обилием логических структур и форичей — он превращается в малочитаемую говно-кашувсе умрут, а я изумруд -
25 мая 2009 г. 4:50, спустя 23 секунды
пардон, в этой теме, кажется, уже говорилвсе умрут, а я изумруд -
25 мая 2009 г. 4:51, спустя 55 секунд
кажется что и в этом тоне тоже)
пардон, в этой теме, кажется, уже говорилСапожник без сапог -
25 мая 2009 г. 5:06, спустя 15 минут 5 секунд
А если потом вдруг понадобится выводить их в другом виде? Или нужно выводить на одной странице зачаренные, а в админке, например, нет?
Я примером показал общий принцип "сбрасывания" переменных в шаблон.
В текущей реализации защита проводится так: extract(ЗАЩИТА($this->tpl_vars))
Если надо добраться до оригинальных данных - юзаем $this->tpl_vars['var_name'], скажете сложно?
Получилась защита от дурака … пока сознательно не полезешь в глубь - не получишь шанса на ошибку (опасный вывод).
Страницы: ← Предыдущая страница • Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!