Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Загрузка темы из main.tpl (https://forum.antichat.xyz/showthread.php?t=179980)

Fox_NICK 18.02.2010 23:02

Загрузка темы из main.tpl
 
Доброго времени суток! не мог ли бы подсказать как сделать так что бы шаблон сайта загружался из файла, к примеру skin/main.tpl
Сейчас шаблон сайт у меня загружается так : $skin_name = _skin_dir."/"._skin_name."/index.php";

но так не очень удобно...

POS_troi 18.02.2010 23:35

Делай парсер tpl , примеров куча - тот-же DLE

Я пользуюсь этим
Код:

<?php

class tpl {

        var $data        =        array();
        var $root        =        '.';
        var $ext        =        '.tpl';
        var $da_vr        =        array();
       
        function template($name, $dir, $file = '') {
                global $lang;

                if (is_dir($dir)) {
                        $this -> root = $dir;
                }
                else {
                        die(sprintf($lang['msge_no_tpldir'], $dir));
                }
               
                $nn                =        $name;
                $ext        =        $this -> ext;
                $name        =        $dir.'/'.$name.$ext;

                if ($file) {
                        $name = $dir.$file;
                }

                if (!is_file($name)) {
                        die(sprintf($lang['msgе_no_tpl'], $name));
                }

                $fp                =        fopen($name,'r');
                $data        =        filesize($name)?fread($fp,filesize($name)):'';
                fclose($fp);

                $this -> data[$nn] = $data;
        }

        function vars($nn, $vars = array()) {
                global $lang, $member_db, $userROW, $config, $PHP_SELF;

                $data = $this -> data[$nn];

                preg_match_all('/(?<=\{)l_(.*?)(?=\})/i', $data, $larr);

                foreach ($larr[0] as $k => $v) {
                        $name_larr = substr($v, 2);
                        $data = str_replace('{'.$v.'}', $lang[$name_larr], $data);
                }

                preg_match_all('/\[isplugin (.+?)\](.+?)\[\/isplugin\]/is', $data, $parr);
                foreach ($parr[0] as $k => $v) {
                        //print "ISPLUG '$k' => '$v' [".$parr[1][$k]."][".$parr[2][$k]."]<br>\n";
                        $data = str_replace($v,status($parr[1][$k])?$parr[2][$k]:'', $data);
                }

                preg_match_all('/\[isnplugin (.+?)\](.+?)\[\/isnplugin\]/is', $data, $parr);
                foreach ($parr[0] as $k => $v) {
                        $data = str_replace($v,status($parr[1][$k])?'':$parr[2][$k], $data);
                }

                preg_match_all('/(?<=\{)plugin_(.*?)(?=\})/i', $data, $parr);

                foreach ($parr[0] as $k => $v) {
                        $name_parr = substr($v, 7);
                        if (preg_match('/^(.+)\_/', $name_parr, $match))
                                $name_parr = $match[1];
                               
                        if (!status($name_parr)) {
                                $data = str_replace('{'.$v.'}', '', $data);       
                        }
                }

                if ($PHP_SELF && $PHP_SELF == "admin.php") {
                        preg_match_all('/(?<=\{)c_(.*?)(?=\})/i', $data, $carr);

                        foreach ($carr[0] as $k => $v) {
                                $name_carr = substr($v, 2);
                                $data = str_replace('{'.$v.'}', $config[$name_carr], $data);
                        }
                }

                if ($vars['vars']) {
                        foreach ($vars['vars'] as $id => $var) {
                                if (eregi("\[", $id)) {
                                        $data = str_replace($id, $var, $data);
                                }
                                else {
                                        $data = str_replace('{'.$id.'}', $var, $data);
                                }
                        }
                }
               
                if ($vars['regx']) {
                        foreach ($vars['regx'] as $id => $var) {
                                $data = preg_replace($id, $var, $data);
                        }
                }
                $data = str_replace('{skins_url}', skins_url, $data);
                $data = str_replace('{tpl_url}', tpl_url, $data);
                $data = str_replace('{zz_url}', zz_url, $data);

                $this -> da_vr[$nn] = $data;
        }

        function show($name) {
                $ret = $this -> da_vr[$name];
                $this -> da_vr[$name] = $this -> data[$name];
                return $ret;
        }
}
?>


использование

Код:

$tpl = new tpl;
        $vars['vars']['CONTENT'] = show_short_video($navi['start'],$navi['num']);
        $vars['vars']['NAV'] = $navi['navi'];
        $tpl->template('main','./themplates/default/');
        $tpl->vars('main',$vars);
        echo $tpl->show('main');


Fox_NICK 18.02.2010 23:48

Спасибо огромное! очень выручил


Время: 23:39