| <?php |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| namespace think; |
|
|
| class View |
| { |
| |
| protected static $instance; |
| |
| public $engine; |
| |
| protected $data = []; |
| |
| protected static $var = []; |
| |
| protected $replace = []; |
|
|
| |
| |
| |
| |
| |
| |
| public function __construct($engine = [], $replace = []) |
| { |
| |
| $this->engine($engine); |
| |
| $request = Request::instance(); |
| $base = $request->root(); |
| $root = strpos($base, '.') ? ltrim(dirname($base), DS) : $base; |
| if ('' != $root) { |
| $root = '/' . ltrim($root, '/'); |
| } |
| |
| if($GLOBALS['config']['site']['new_version'] == 1 || !isset($GLOBALS['config']['site']['new_version']) || (empty($GLOBALS['config']['site']['new_version']) && $GLOBALS['config']['site']['new_version'] != 0)){ |
| $root . $static_path = '/static_new/'; |
| }else{ |
| $root . $static_path = '/static/'; |
| } |
| $baseReplace = [ |
| '__ROOT__' => $root, |
| 'MAC_BASE_PATH' => $root, |
| '__URL__' => $base . '/' . $request->module() . '/' . Loader::parseName($request->controller()), |
| '__STATIC__' => $root . $static_path, |
| '__CSS__' => $root . $static_path . '/css', |
| '__JS__' => $root . $static_path .'/js', |
| ]; |
| $this->assign('MAC_BASE_PATH', $this->mac_base_path()); |
| $this->replace = array_merge($baseReplace, (array) $replace); |
| } |
|
|
| public function mac_base_path() |
| { |
| return $GLOBALS['rootpath']; |
| } |
|
|
|
|
| |
| |
| |
| |
| |
| |
| |
| public static function instance($engine = [], $replace = []) |
| { |
| if (is_null(self::$instance)) { |
| self::$instance = new self($engine, $replace); |
| } |
| return self::$instance; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public static function share($name, $value = '') |
| { |
| if (is_array($name)) { |
| self::$var = array_merge(self::$var, $name); |
| } else { |
| self::$var[$name] = $value; |
| } |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public function assign($name, $value = '') |
| { |
| if (is_array($name)) { |
| $this->data = array_merge($this->data, $name); |
| } else { |
| $this->data[$name] = $value; |
| } |
| return $this; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| public function engine($options = []) |
| { |
| if (is_string($options)) { |
| $type = $options; |
| $options = []; |
| } else { |
| $type = !empty($options['type']) ? $options['type'] : 'Think'; |
| } |
|
|
| $class = false !== strpos($type, '\\') ? $type : '\\think\\view\\driver\\' . ucfirst($type); |
| if (isset($options['type'])) { |
| unset($options['type']); |
| } |
| $this->engine = new $class($options); |
| return $this; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public function config($name, $value = null) |
| { |
| $this->engine->config($name, $value); |
| return $this; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| public function fetch($template = '', $vars = [], $replace = [], $config = [], $renderContent = false) |
| { |
| |
| $vars = array_merge(self::$var, $this->data, $vars); |
|
|
| |
| ob_start(); |
| ob_implicit_flush(0); |
|
|
| |
| try { |
| $method = $renderContent ? 'display' : 'fetch'; |
| |
| $replace = array_merge($this->replace, $replace, (array) $this->engine->config('tpl_replace_string')); |
| $this->engine->config('tpl_replace_string', $replace); |
| $this->engine->$method($template, $vars, $config); |
| } catch (\Exception $e) { |
| ob_end_clean(); |
| throw $e; |
| } |
|
|
| |
| $content = ob_get_clean(); |
| |
| Hook::listen('view_filter', $content); |
| return $content; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public function replace($content, $replace = '') |
| { |
| if (is_array($content)) { |
| $this->replace = array_merge($this->replace, $content); |
| } else { |
| $this->replace[$content] = $replace; |
| } |
| return $this; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| public function display($content, $vars = [], $replace = [], $config = []) |
| { |
| return $this->fetch($content, $vars, $replace, $config, true); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| public function __set($name, $value) |
| { |
| $this->data[$name] = $value; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| public function __get($name) |
| { |
| return $this->data[$name]; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| public function __isset($name) |
| { |
| return isset($this->data[$name]); |
| } |
| } |
|
|