Шаблонизатор от DLE

Discussion in 'PHP' started by Fox_NICK, 11 Mar 2010.

  1. Fox_NICK

    Fox_NICK Elder - Старейшина

    Joined:
    10 Jan 2007
    Messages:
    45
    Likes Received:
    5
    Reputations:
    0
    Шаблонизатор от DLE
    Вот решил выложить на мой взгляд очень полезную штуку) шаблонизатор скрученный с ДЛЕ, но немного изменен, думаю многим должно помочь в написании своей CMS ну и т.д ))
    Что можно сказать о его возможностях!?
    Возможность добавлять php код в tpl, вывод переменных такого типа : {.....}
    Ну а дальше я думаю разберитесь

    Код index.php =)

    PHP:
    <?

    include(
    "templates.class.php"); //подключение class

    $tpl    = new Template//инициируем класс
    $tpl->dir 'template/'//задаём местоположение папки с шаблонами
    $tpl->load_template('main.tpl'); //загружаем каркас
    $tpl->set('{sub_templ}'$tpl->sub_load_template('sub.tpl')); //подключаем код блока

    //подставляем значения переменных
    $tpl->set('{var1}''блок2');
    $tpl->set('{var2}''блок3');

    $tpl->compile('main'); //собираем шаблон
    eval (' ?' '>' $tpl->result['main'] . '<' '?php '); //выводим результат работы, с возможностью вставки пхп кода в tpl
    $tpl->global_clear(); //очищаем все переменные для возможно следующего шаблона

    ?>

    Код templates.class.php

    PHP:
    <?php

    class Template {

        public  
    $dir '.';
        public  
    $template null;
        public  
    $copy_template null;
        public  
    $data = array();
        public  
    $block_data = array();
        public  
    $result = array('info' => '''content' => '');
        public  
    $template_parse_time 0;

    //задаём параметры основных переменных подгрузки шаблона

        
    public function set($name $var) {
            if (
    is_array($var) && count($var)) {
                foreach (
    $var as $key => $key_var) {
                    
    $this->set($key $key_var);
                } } else 
    $this->data[$name] = $var;
        }

    //обозначаем блоки

        
    public function set_block($name $var) {
            if (
    is_array($var) && count($var)) {
                foreach (
    $var as $key => $key_var) {
                    
    $this->set_block($key $key_var);
                } } else 
    $this->block_data[$name] = $var;
        }

    //производим загрузку каркасного шаблона

        
    public function load_template($tpl_name) {
        
    $time_before $this->get_real_time();
            if (
    $tpl_name == '' || !file_exists($this->dir DIRECTORY_SEPARATOR $tpl_name)) { die ("Невозможно загрузить шаблон: "$tpl_name); return false;}
            
    $this->template file_get_contents($this->dir DIRECTORY_SEPARATOR $tpl_name);
            if ( 
    stristr$this->template"{include file=" ) ) {
                
    $this->template preg_replace"#\\{include file=['\"](.+?)['\"]\\}#ies","\$this->sub_load_template('\\1')"$this->template);
            }
            
    $this->copy_template $this->template;
        
    $this->template_parse_time += $this->get_real_time() - $time_before;
        return 
    true;
        }

    // этой функцией загружаем "подшаблоны"

        
    public function sub_load_template($tpl_name) {
            if (
    $tpl_name == '' || !file_exists($this->dir DIRECTORY_SEPARATOR $tpl_name)) { die ("Невозможно загрузить шаблон: "$tpl_name); return false;}
            
    $template file_get_contents($this->dir DIRECTORY_SEPARATOR $tpl_name);
            return 
    $template;
        }

    // очистка переменных шаблона
        
    public function _clear() {
        
    $this->data = array();
        
    $this->block_data = array();
        
    $this->copy_template $this->template;
        }

        public function 
    clear() {
        
    $this->data = array();
        
    $this->block_data = array();
        
    $this->copy_template null;
        
    $this->template null;
        }
    //полная очистка включая результаты сборки шаблона
        
    public function global_clear() {
        
    $this->data = array();
        
    $this->block_data = array();
        
    $this->result = array();
        
    $this->copy_template null;
        
    $this->template null;
        }
    //сборка шаблона в единое целое
        
    public function compile($tpl) {
        
    $time_before $this->get_real_time();
        foreach (
    $this->data as $key_find => $key_replace) {
                    
    $find[] = $key_find;
                    
    $replace[] = $key_replace;
                }
        
    $result str_replace($find$replace$this->copy_template);
        if (
    count($this->block_data)) {
            foreach (
    $this->block_data as $key_find => $key_replace) {
                    
    $find_preg[] = $key_find;
                    
    $replace_preg[] = $key_replace;
                    }
        
    $result preg_replace($find_preg$replace_preg$result);
        }
        if (isset(
    $this->result[$tpl])) $this->result[$tpl] .= $result; else $this->result[$tpl] = $result;
        
    $this->_clear();
        
    $this->template_parse_time += $this->get_real_time() - $time_before;
        }
    //счётчик времени выполнения запросов сборки
        
    public function get_real_time()
        {
            list(
    $seconds$microSeconds) = explode(' 'microtime());
            return ((float)
    $seconds + (float)$microSeconds);
        }
    }

    ?>

    Ну вот и все) желаю удачи!
     
    #1 Fox_NICK, 11 Mar 2010
    Last edited: 13 Mar 2010
    3 people like this.
  2. bajex

    bajex New Member

    Joined:
    7 Aug 2013
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    А не подскажете, как на этой радости сделать, вывод другого файла допустим ставим {news} и будет выводится информация из файла news.tpl
     
  3. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    140
    Reputations:
    4
    а чем лучше того же smarty ?
     
  4. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,174
    Likes Received:
    1,157
    Reputations:
    202
    Как вариант:
    PHP:
    $tpl->set('{news}',  file_get_contents('news.tpl')); 
    Возмите полноценный шаблонизатор
     
  5. davudovdima

    davudovdima New Member

    Joined:
    8 Nov 2019
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Добрый день, как создать теги понятно, но не понятно как создать тег типа {content} который по ссылке такого типа (http://localhost/index.php?do=reg) будет открывать страницу регистрации в шаблоне? либо любую другую страницу сайта?!
    Заранее спасибо!!!:)