View file libraries/view.php

File size: 3.54Kb
<?php
/**
 * Ant0ha's project
 *
 * @package
 * @author Anton Pisarenko <[email protected]>
 * @copyright Copyright (c) 2006 - 2010, Anton Pisarenko
 * @license http://ant0ha.ru/license.txt
 * @link http://ant0ha.ru
 */

//----------------------------------------------
/**
 * View
 */
class View {
	/**
	* Путь к папке с шаблонами
	*/
	public $template_dir = NULL;
	/**
	* Переменные шаблона
	*/
	public $vars = array();
	/**
	* Имя файла шаблона
	*/
	public $template_file = NULL;
	/**
	* Название темы
	*/
	public $theme = 'default';

	/**
	* Construct
	*
	* @param <type> $template_dir
	* @param <type> $cache_dir
	*/
	function __construct($template_dir = '', $cache_dir = ''){
		$this->template_dir = ($template_dir ? $template_dir : ROOT .'views/');
	}

	/**
	* Генерация страницы
	*
	* @param <type> $filename
	* @param <type> $params
	* @return <type> $generated_page
	*/
	function parse($filename, $params = array()){
		# Если не указано расширение файла, указываем его
		if(!strstr($filename, '.tpl')) $filename .= '.tpl';

		# Определение дополнительных параметров
		foreach($params AS $var => $var_value) {
			$this->vars[$var] = $var_value;
		}

		if(strpos($this->theme, 'admin') === 0) $alternative_theme = 'admin';
		else $alternative_theme = 'default';

		# Определяем имя файла шаблона
		if(file_exists(ROOT . 'modules/'. ROUTE_MODULE .'/views/'. $this->theme .'/'. $filename)) {
			$this->template_file = ROOT . 'modules/'. ROUTE_MODULE .'/views/'. $this->theme .'/'. $filename;
		}
		elseif(file_exists(ROOT . 'modules/'. ROUTE_MODULE .'/views/'. $alternative_theme .'/'. $filename)) {
			$this->template_file = ROOT . 'modules/'. ROUTE_MODULE .'/views/'. $alternative_theme .'/'. $filename;
		}
		elseif(file_exists(ROOT .'/views/'. $this->theme .'/'. $filename)) {
			$this->template_file = ROOT .'/views/'. $this->theme .'/'. $filename;
		}
		else die('Файл <b>'. $filename .'</b> не является шаблоном или не найден.');


		# Создаем ссылки на переменные из общего массива, чтобы они были видны в шаблоне
		extract($this->vars, EXTR_REFS);

		ob_start();
		include($this->template_file);
		$page_contents = ob_get_clean();
		if($GLOBALS['CONFIG']['system']['license_key'] != md5($_SERVER['HTTP_HOST'] . 'MobileCMS')) {
			$page_contents = str_replace('<!-- copyright -->', '<br /><span style="font-size: 9px; font-weight: lighter;">Базируется на <a href="http://mobilecms.ru">MobileCMS</a></span>', $page_contents);
		}
		return $page_contents;
	}

	/**
	* Вывод кода страницы
	*
	* @param <type> $filename
	* @param <type> $params
	*/
	function display($filename, $params = array()) {
		echo $this->parse($filename, $params);
	}

	/**
	 * Assign переменных
	 *
	 * @param <type> $param1
	 * @param <type> $param2
	 * @return <type>
	 */
  	function assign($param1, $param2 = NULL) {
  		if(!$param2 && is_array($param1)) {
  			foreach($param1 AS $key => $value) {
  				$this->vars[$key] = $value;
  			}
  			return TRUE;
  		}
  		elseif($param2) {
  			$this->vars[$param1] = $param2;
  			return TRUE;
  		}
  		return FALSE;
  	}

	// Функция выводит все данные из общего массива на страницу.
	// Используется для отладки
	function debug(){
	    echo '<pre>';
	    print_r($this->vars);
	    echo '</pre>';
	}
}
?>