зачем тебе громоздкий смарти? PHP: <?php class View { private $_path; private $_template; private $_var = array(); public function __construct($path = '') { $this->_path = $_SERVER['DOCUMENT_ROOT'] . $path; } public function set($name, $value) { $this->_var[$name] = $value; } public function __get($name) { if (isset($this->_var[$name])) return $this->_var[$name]; return ''; } public function display($template, $strip = true) { $this->_template = $this->_path . $template; if (!file_exists($this->_template)) die('Шаблона ' . $this->_template . ' не существует!'); ob_start(); include($this->_template); echo ($strip) ? $this->_strip(ob_get_clean()) : ob_get_clean(); } private function _strip($data) { $lit = array("\\t", "\\n", "\\n\\r", "\\r\\n", " "); $sp = array('', '', '', '', ''); return str_replace($lit, $sp, $data); } public function xss($data) { if (is_array($data)) { $escaped = array(); foreach ($data as $key => $value) { $escaped[$key] = $this->xss($value); } return $escaped; } return htmlspecialchars($data, ENT_QUOTES); } } ?> index.php PHP: <?php require_once("class.view.php"); $view = new View("/template/"); $view->set("title", "Наш заголовок"); $view->set("content", "Какой-то текст."); $view->set("header", "Какой-то текст header."); echo $view->display("index.tpl"); ?> $view->set("title", "ВАШ ПХП ЗАПРОС $var итд"); в templates кидайш index.tpl <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> <title><?=$this->title?></title> </head> <body> <h1><?=$this->title?></h1> <h1><?=$this->content?></h1> <?=$this->content?> <h1><?=$this->header?></h1> </body> </html
Я переделываю скрипт там все на smarty. как в шаблоне выполнить пхп?? или вывести имя домена аля $_SERVER['HTTP_HOST'] ?
Nelz. не понятно что ты написал. куча кода не по теме. у меня есть шаблон смарти. как мне выполнить там пхп код? например <? echo "это код"; ?> конкретно: у меня много файлов *.tpl что в них вставить что бы выполня пхп код из них? например выводилось имя домена?
Требовалось исполнить код в тимлейтах Smarty, $smarty.version показывал 2.6.13, теги {php} и {include_php} не давали результата по причине Smarty Secure Mode = On. Документация говорила использовать модификаторы, так и поступим. Среди списка был regex_replace - аналог preg_replace в php. PHP: 23 function smarty_modifier_regex_replace($string, $search, $replace) 24 { 25 if (preg_match('!([a-zA-Z\s]+)$!s', $search, $match) && (strpos($match[1], 'e') !== false)) { 26 /* remove eval-modifier from $search */ 27 $search = substr($search, 0, -strlen($match[1])) . preg_replace('![e\s]+!', '', $match[1]); 28 } 29 30 return preg_replace($search, $replace, $string); 31 } К сожалению, модификатор e был запрещен, но тогда был придуман такой метод Code: pattern - /<!--(.*?)-->/e[B]NULL_BYTE[/B] replacement - $1 string match - %3C!--{${eval($s)}}--%3E