Как выполнить php в шаблонах Smarty ?

Discussion in 'PHP' started by ttt0z, 2 Mar 2011.

  1. ttt0z

    ttt0z Member

    Joined:
    18 Nov 2007
    Messages:
    176
    Likes Received:
    10
    Reputations:
    -5
    Как выполнить php в шаблонах Smarty ?
    или хотя бы вывести имя домена?
     
  2. Nelz.

    Nelz. Member

    Joined:
    2 Aug 2010
    Messages:
    151
    Likes Received:
    7
    Reputations:
    0
    зачем тебе громоздкий смарти?

    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($dataENT_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
     
    #2 Nelz., 2 Mar 2011
    Last edited: 2 Mar 2011
  3. ttt0z

    ttt0z Member

    Joined:
    18 Nov 2007
    Messages:
    176
    Likes Received:
    10
    Reputations:
    -5
    Я переделываю скрипт там все на smarty.
    как в шаблоне выполнить пхп??
    или вывести имя домена аля $_SERVER['HTTP_HOST'] ?
     
  4. Nelz.

    Nelz. Member

    Joined:
    2 Aug 2010
    Messages:
    151
    Likes Received:
    7
    Reputations:
    0
    я вам показал сверху
     
  5. ttt0z

    ttt0z Member

    Joined:
    18 Nov 2007
    Messages:
    176
    Likes Received:
    10
    Reputations:
    -5
    Nelz. не понятно что ты написал. куча кода не по теме.
    у меня есть шаблон смарти.
    как мне выполнить там пхп код? например <? echo "это код"; ?>

    конкретно: у меня много файлов *.tpl
    что в них вставить что бы выполня пхп код из них? например выводилось имя домена?
     
  6. b3

    b3 Moderator

    Joined:
    5 Dec 2004
    Messages:
    1,885
    Likes Received:
    710
    Reputations:
    198
    Тебя гугл забанил?
    http://www.smarty.net/docsv2/ru/language.function.php.tpl
     
    _________________________
  7. ttt0z

    ttt0z Member

    Joined:
    18 Nov 2007
    Messages:
    176
    Likes Received:
    10
    Reputations:
    -5
    b3, спасибо! Это помогдо то что нужно!
    в гугле искал не наткнулся на это!
     
  8. gemaglabin

    gemaglabin Green member

    Joined:
    1 Aug 2006
    Messages:
    788
    Likes Received:
    842
    Reputations:
    1,369
    Требовалось исполнить код в тимлейтах 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($search0, -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
    
     
    2 people like this.
Loading...