📄 view.php
字号:
// If $model is null we use the default model if (is_null($default)) { $model = $this->_defaultModel; } else { $model = strtolower( $default ); } // First check to make sure the model requested exists if (isset( $this->_models[$model] )) { // Model exists, lets build the method name $method = 'get'.ucfirst($property); // Does the method exist? if (method_exists($this->_models[$model], $method)) { // The method exists, lets call it and return what we get $result = $this->_models[$model]->$method(); return $result; } } // degrade to JObject::get $result = parent::get( $property, $default ); return $result; } /** * Method to get the model object * * @access public * @param string $name The name of the model (optional) * @return mixed JModel object */ function &getModel( $name = null ) { if ($name === null) { $name = $this->_defaultModel; } return $this->_models[strtolower( $name )]; } /** * Get the layout. * * @access public * @return string The layout name */ function getLayout() { return $this->_layout; } /** * Method to get the view name * * The model name by default parsed using the classname, or it can be set * by passing a $config['name'] in the class constructor * * @access public * @return string The name of the model * @since 1.5 */ function getName() { $name = $this->_name; if (empty( $name )) { $r = null; if (!preg_match('/View((view)*(.*(view)?.*))$/i', get_class($this), $r)) { JError::raiseError (500, "JView::getName() : Cannot get or parse class name."); } if (strpos($r[3], "view")) { JError::raiseWarning('SOME_ERROR_CODE',"JView::getName() : Your classname contains the substring 'view'. ". "This causes problems when extracting the classname from the name of your objects view. " . "Avoid Object names with the substring 'view'."); } $name = strtolower( $r[3] ); } return $name; } /** * Method to add a model to the view. We support a multiple model single * view system by which models are referenced by classname. A caveat to the * classname referencing is that any classname prepended by JModel will be * referenced by the name without JModel, eg. JModelCategory is just * Category. * * @access public * @param object $model The model to add to the view. * @param boolean $default Is this the default model? * @return object The added model */ function &setModel( &$model, $default = false ) { $name = strtolower($model->getName()); $this->_models[$name] = &$model; if ($default) { $this->_defaultModel = $name; } return $model; } /** * Sets the layout name to use * * @access public * @param string $template The template name. * @return string Previous value * @since 1.5 */ function setLayout($layout) { $previous = $this->_layout; $this->_layout = $layout; return $previous; } /** * Allows a different extension for the layout files to be used * * @access public * @param string The extension * @return string Previous value * @since 1.5 */ function setLayoutExt( $value ) { $previous = $this->_layoutExt; if ($value = preg_replace( '#[^A-Za-z0-9]#', '', trim( $value ) )) { $this->_layoutExt = $value; } return $previous; } /** * Sets the _escape() callback. * * @param mixed $spec The callback for _escape() to use. */ function setEscape($spec) { $this->_escape = $spec; } /** * Adds to the stack of view script paths in LIFO order. * * @param string|array The directory (-ies) to add. * @return void */ function addTemplatePath($path) { $this->_addPath('template', $path); } /** * Adds to the stack of helper script paths in LIFO order. * * @param string|array The directory (-ies) to add. * @return void */ function addHelperPath($path) { $this->_addPath('helper', $path); } /** * Load a template file -- first look in the templates folder for an override * * @access public * @param string $tpl The name of the template source file ... * automatically searches the template paths and compiles as needed. * @return string The output of the the template script. */ function loadTemplate( $tpl = null) { global $mainframe, $option; // clear prior output $this->_output = null; //create the template file name based on the layout $file = isset($tpl) ? $this->_layout.'_'.$tpl : $this->_layout; // clean the file name $file = preg_replace('/[^A-Z0-9_\.-]/i', '', $file); $tpl = preg_replace('/[^A-Z0-9_\.-]/i', '', $tpl); // load the template script jimport('joomla.filesystem.path'); $filetofind = $this->_createFileName('template', array('name' => $file)); $this->_template = JPath::find($this->_path['template'], $filetofind); if ($this->_template != false) { // unset so as not to introduce into template scope unset($tpl); unset($file); // never allow a 'this' property if (isset($this->this)) { unset($this->this); } // start capturing output into a buffer ob_start(); // include the requested template filename in the local scope // (this will execute the view logic). include $this->_template; // done with the requested template; get the buffer and // clear it. $this->_output = ob_get_contents(); ob_end_clean(); return $this->_output; } else { return JError::raiseError( 500, 'Layout "' . $file . '" not found' ); } } /** * Load a helper file * * @access public * @param string $tpl The name of the helper source file ... * automatically searches the helper paths and compiles as needed. * @return boolean Returns true if the file was loaded */ function loadHelper( $hlp = null) { // clean the file name $file = preg_replace('/[^A-Z0-9_\.-]/i', '', $hlp); // load the template script jimport('joomla.filesystem.path'); $helper = JPath::find($this->_path['helper'], $this->_createFileName('helper', array('name' => $file))); if ($helper != false) { // include the requested template filename in the local scope include_once $helper; } } /** * Sets an entire array of search paths for templates or resources. * * @access protected * @param string $type The type of path to set, typically 'template'. * @param string|array $path The new set of search paths. If null or * false, resets to the current directory only. */ function _setPath($type, $path) { global $mainframe, $option; // clear out the prior search dirs $this->_path[$type] = array(); // actually add the user-specified directories $this->_addPath($type, $path); // always add the fallback directories as last resort switch (strtolower($type)) { case 'template': { // set the alternative template search dir if (isset($mainframe)) { $option = preg_replace('/[^A-Z0-9_\.-]/i', '', $option); $fallback = JPATH_BASE.DS.'templates'.DS.$mainframe->getTemplate().DS.'html'.DS.$option.DS.$this->getName(); $this->_addPath('template', $fallback); } } break; } } /** * Adds to the search path for templates and resources. * * @access protected * @param string|array $path The directory or stream to search. */ function _addPath($type, $path) { // just force to array settype($path, 'array'); // loop through the path directories foreach ($path as $dir) { // no surrounding spaces allowed! $dir = trim($dir); // add trailing separators as needed if (substr($dir, -1) != DIRECTORY_SEPARATOR) { // directory $dir .= DIRECTORY_SEPARATOR; } // add to the top of the search dirs array_unshift($this->_path[$type], $dir); } } /** * Create the filename for a resource * * @access private * @param string $type The resource type to create the filename for * @param array $parts An associative array of filename information * @return string The filename * @since 1.5 */ function _createFileName($type, $parts = array()) { $filename = ''; switch($type) { case 'template' : $filename = strtolower($parts['name']).'.'.$this->_layoutExt; break; default : $filename = strtolower($parts['name']).'.php'; break; } return $filename; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -