📄 view.php.svn-base
字号:
<?php/* SVN FILE: $Id: view.php 4202 2006-12-25 12:06:13Z phpnut $ *//** * Methods for displaying presentation data in the view. * * * PHP versions 4 and 5 * * CakePHP : Rapid Development Framework <http://www.cakephp.org/> * Copyright (c) 2006, Cake Software Foundation, Inc. * 1785 E. Sahara Avenue, Suite 490-204 * Las Vegas, Nevada 89104 * * Licensed under The MIT License * Redistributions of files must retain the above copyright notice. * * @filesource * @copyright Copyright (c) 2006, Cake Software Foundation, Inc. * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project * @package cake * @subpackage cake.cake.libs.view * @since CakePHP v 0.10.0.1076 * @version $Revision: 4202 $ * @modifiedby $LastChangedBy: phpnut $ * @lastmodified $Date: 2006-12-25 06:06:13 -0600 (Mon, 25 Dec 2006) $ * @license http://www.opensource.org/licenses/mit-license.php The MIT License *//** * Included libraries. */uses (DS . 'view' . DS . 'helper');/** * View, the V in the MVC triad. * * Class holding methods for displaying presentation data. * * @package cake * @subpackage cake.cake.libs.view */class View extends Object{/** * Name of the controller. * * @var string Name of controller * @access public */ var $name = null;/** * Stores the current URL (for links etc.) * * @var string Current URL * @access public */ var $here = null;/** * Action to be performed. * * @var string Name of action * @access public */ var $action = null;/** * An array of names of built-in helpers to include. * * @var mixed A single name as a string or a list of names as an array. * @access public */ var $helpers = array('Html');/** * Path to View. * * @var string Path to View * @access public */ var $viewPath;/** * Replaced with public var viewVars * @access protected * @deprecated */ var $_viewVars = array();/** * Variables for the view * * @var array * @access public */ var $viewVars = array();/** * Title HTML element of this View. * * @var boolean * @access public */ var $pageTitle = false;/** * Path parts for creating links in views. * * @var string Base URL * @access public */ var $base = null;/** * Name of layout to use with this View. * * @var string * @access public */ var $layout = 'default';/** * Turns on or off Cake's conventional mode of rendering views. On by default. * * @var boolean * @access public */ var $autoRender = true;/** * Turns on or off Cake's conventional mode of finding layout files. On by default. * * @var boolean * @access public */ var $autoLayout = true;/** * Array of parameter data * * @var array Parameter data * @access public */ var $params;/** * True when the view has been rendered. * * @var boolean * @access protected */ var $_hasRendered = null;/** * @deprecated will not be avialable after 1.1.x.x */ var $controller = null;/** * Array of loaded view helpers. * * @var array * @access public */ var $loaded = array();/** * File extension. Defaults to Cake's conventional ".thtml". * * @var array * @access public */ var $ext = '.thtml';/** * Sub-directory for this view file. * * @var string * @access public */ var $subDir = null;/** * The directory where theme web accessible content is stored * * @var array * @access public */ var $themeWeb = null;/** * Plugin name. A Plugin is a sub-application. * This is used to set the correct paths for views * * @var string * @access public */ var $plugin = null;/**/** * List of variables to collect from the associated controller * * @var array * @access protected */ var $_passedVars = array('viewVars', 'action', 'autoLayout', 'autoRender', 'ext', 'base', 'webroot', 'helpers', 'here', 'layout', 'modelNames', 'name', 'pageTitle', 'viewPath', 'params', 'data', 'webservices', 'plugin');/** * Constructor * * Instance is created in Controller::render() and is never called directly * * @var object instance of the calling controller */ function __construct(&$controller) { if(is_object($controller)) { $this->controller =& $controller; $c = count($this->_passedVars); for ($j = 0; $j < $c; $j++) { $var = $this->_passedVars[$j]; $this->{$var} = $controller->{$var}; } $this->_viewVars =& $this->viewVars; } parent::__construct(); }/** * Renders view for given action and layout. If $file is given, that is used * for a view filename (e.g. customFunkyView.thtml). * * @param string $action Name of action to render for * @param string $layout Layout to use * @param string $file Custom filename for view * @return mixed returns an error if View::render() fails to find a related template. * boolean on successful render * @access public */ function render($action = null, $layout = null, $file = null) { if (isset($this->_hasRendered) && $this->_hasRendered) { return true; } else { $this->_hasRendered = false; } if (!$action) { $action = $this->action; } if ($layout) { $this->setLayout($layout); } if ($file) { $viewFileName = $file; } else { $viewFileName = $this->_getViewFileName($action); } if (!is_null($this->plugin) && is_null($file)) { return $this->pluginView($action, $layout); } if (!is_file($viewFileName) && !fileExistsInPath($viewFileName) || $viewFileName === '/' || $viewFileName === '\\') { if (strpos($action, 'missingAction') !== false) { $errorAction = 'missingAction'; } else { $errorAction = 'missingView'; } foreach(array($this->name, 'errors') as $viewDir) { $errorAction = Inflector::underscore($errorAction); if (file_exists(VIEWS . $viewDir . DS . $errorAction . $this->ext)) { $missingViewFileName = VIEWS . $viewDir . DS . $errorAction . $this->ext; } elseif($missingViewFileName = fileExistsInPath(LIBS . 'view' . DS . 'templates' . DS . $viewDir . DS . $errorAction . '.thtml')) { } else { $missingViewFileName = false; } $missingViewExists = is_file($missingViewFileName); if ($missingViewExists) { break; } } if (strpos($action, 'missingView') === false) { return $this->cakeError('missingView', array(array('className' => $this->controller->name, 'action' => $action, 'file' => $viewFileName, 'base' => $this->base))); $isFatal = isset($this->isFatal) ? $this->isFatal : false; if (!$isFatal) { $viewFileName = $missingViewFileName; } } else { $missingViewExists = false; } if (!$missingViewExists || $isFatal) { if (Configure::read() > 0) { trigger_error(sprintf("No template file for view %s (expected %s), create it first'", $action, $viewFileName), E_USER_ERROR); } else { $this->error('404', 'Not found', sprintf("The requested address %s was not found on this server.", '', "missing view \"{$action}\"")); } die(); } } if ($viewFileName && !$this->_hasRendered) { if (substr($viewFileName, -5) === 'thtml') { $out = View::_render($viewFileName, $this->viewVars); } else { $out = $this->_render($viewFileName, $this->viewVars); } if ($out !== false) { if ($this->layout && $this->autoLayout) { $out = $this->renderLayout($out); if (isset($this->loaded['cache']) && ((isset($this->controller) && $this->controller->cacheAction != false)) && (defined('CACHE_CHECK') && CACHE_CHECK === true)) { $replace = array('<cake:nocache>', '</cake:nocache>'); $out = str_replace($replace, '', $out); } } print $out; $this->_hasRendered = true; } else { $out = $this->_render($viewFileName, $this->viewVars); trigger_error(sprintf("Error in view %s, got: <blockquote>%s</blockquote>", $viewFileName, $out), E_USER_ERROR); } return true; } }/** * Renders a piece of PHP with provided parameters and returns HTML, XML, or any other string. * * This realizes the concept of Elements, (or "partial layouts") * and the $params array is used to send data to be used in the Element. * * @param string $name Name of template file in the/app/views/elements/ folder * @param array $params Array of data to be made available to the for rendered view (i.e. the Element) * @return string Rendered output * @access public */ function renderElement($name, $params = array()) { $params = array_merge_recursive($params, $this->loaded); if(isset($params['plugin'])) { $this->plugin = $params['plugin']; } if (!is_null($this->plugin)) { if (file_exists(APP . 'plugins' . DS . $this->plugin . DS . 'views' . DS . 'elements' . DS . $name . $this->ext)) { $elementFileName = APP . 'plugins' . DS . $this->plugin . DS . 'views' . DS . 'elements' . DS . $name . $this->ext; return $this->_render($elementFileName, array_merge($this->viewVars, $params), false); } } $paths = Configure::getInstance(); foreach($paths->viewPaths as $path) { if (file_exists($path . 'elements' . DS . $name . $this->ext)) { $elementFileName = $path . 'elements' . DS . $name . $this->ext; return $this->_render($elementFileName, array_merge($this->viewVars, $params), false); } } return "(Error rendering Element: {$name})"; }/** * Wrapper for View::renderElement(); * * @param string $name Name of template file in the/app/views/elements/ folder * @param array $params Array of data to be made available to the for rendered view (i.e. the Element) * @return string View::renderElement() * @access public */ function element($name, $params = array()) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -