📄 view.php
字号:
{
$result = false;
// If $model is null we use the default model
if (is_null($model)) {
$model = $this->_defaultModel;
} else {
$model = strtolower( $model );
}
// First check to make sure the model requested exists
if (isset( $this->_models[$model] ))
{
// Model exists, lets build the method name
$method = 'get'.ucfirst($method);
// 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();
}
else
{
// Method wasn't found... throw a warning and return false
JError::raiseWarning( 0, "Unknown Method $model::$method() was not found");
$result = false;
}
}
else
{
// degrade to JObject::get
$result = parent::get( $method, $model );
}
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.");
}
$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');
$this->_template = JPath::find($this->_path['template'], $this->_createFileName('template', array('name' => $file)));
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->_name;
$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 + -