Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Выполнение кода PHP в шаблоне
Форумы портала PHP.SU » PHP » Программирование на PHP » Выполнение кода PHP в шаблоне

Страниц (1): [1]
 

1. sklins - 12 Ноября, 2010 - 17:52:17 - перейти к сообщению
Собственно вот template.php, как заставить его выполнять пхп код? Из-за одной строки кода в шаблоне не охото ставить смарти и подобные.
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class parse_class
  3. {
  4. var $vars = array();
  5. var $template;
  6.  
  7. function get_tpl($tpl_name)
  8. {
  9. if(empty($tpl_name) || !file_exists($tpl_name))
  10. {
  11. return false;
  12. }
  13. else
  14. {
  15. $this->template = file_get_contents($tpl_name);
  16. }
  17. }
  18. function set_tpl($key,$var)
  19. {
  20. $this->vars[$key] = $var;
  21. }
  22. function tpl_parse()
  23. {
  24. foreach($this->vars as $find => $replace)
  25. {
  26. $this->template = str_replace($find, $replace, $this->template);
  27. }
  28. }
  29. }
  30. $parse = new parse_class;
  31.  
  32. ?>
  33.  
2. vlom - 12 Ноября, 2010 - 18:27:44 - перейти к сообщению
так же задумался над этим вопросом, подумал что лучше будет сначало перехватить выходной поток php шаблона в буфер а затем уже работать с содержимым буфера как со строкой.
содержимое функции функции get_tpl заменить на:
PHP:
скопировать код в буфер обмена
  1.  
  2. if(empty($tpl_name) || !file_exists($tpl_name)){
  3.   return false;
  4. }else{
  5.   ob_start();
  6.     include "$tpl_name";
  7.   $this->template = ob_get_contents();
  8. }
  9.  

как-то примерно так, может ещё есть у кого мысли по этому поводу???
3. Варяг - 13 Ноября, 2010 - 09:19:41 - перейти к сообщению
вы же написали:
PHP:
скопировать код в буфер обмена
  1. class parse_class
  2. {
  3. private $vars = array();
  4. private $template;
  5.  
  6.   function __construct(){
  7. //эта функция выполнится автоматом при создании объекта.
  8.   }
  9. }
  10. $parse = new parse_class(); //только скобок не хватает, в них можно добавить параметр, который выполнится в конструкторе класса
  11.  
  12.  


вот так вы заставите выполнять этот код. Конечно, если я Вас правильно понял.
4. JustUserR - 14 Ноября, 2010 - 01:22:29 - перейти к сообщению
sklins Для осуществление выполнение программного кода PHP-скрипта включение которого обеспечивается в форме использование шаблона для генерации содержимого для целевого пользовательского запроса - возможно применение различных схем безопасной реализации указанной задачи В частности одним из факторов осуществления указанного подключение является предваренное контролирование уровня преставления загружаемой информации и обеспечение передачи управления текущего потока - осуществление мануального контроля с достаточной безопасностью может быть достинуто посреством предварительной фильрации исполняемого программного кода с обеспечением его адаптации у требуемый уровень трактования - или использование модуля runkit с функциональностью sandboxing для реализации безопасной интерпретаци целевого PHP-кода средствам исходного транслятора в управляемой программной компоненте

 

Powered by ExBB FM 1.0 RC1