Загрузка темы из main.tpl

Discussion in 'PHP' started by Fox_NICK, 18 Feb 2010.

  1. Fox_NICK

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

    Joined:
    10 Jan 2007
    Messages:
    45
    Likes Received:
    5
    Reputations:
    0
    Доброго времени суток! не мог ли бы подсказать как сделать так что бы шаблон сайта загружался из файла, к примеру skin/main.tpl
    Сейчас шаблон сайт у меня загружается так : $skin_name = _skin_dir."/"._skin_name."/index.php";

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

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

    Joined:
    1 Dec 2006
    Messages:
    1,569
    Likes Received:
    466
    Reputations:
    108
    Делай парсер tpl , примеров куча - тот-же DLE

    Я пользуюсь этим
    Code:
    <?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;
    	}
    }
    ?>
    

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

    Code:
    $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');
    
     
    #2 POS_troi, 18 Feb 2010
    Last edited: 18 Feb 2010
    1 person likes this.
  3. Fox_NICK

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

    Joined:
    10 Jan 2007
    Messages:
    45
    Likes Received:
    5
    Reputations:
    0
    Спасибо огромное! очень выручил