Source code for file /joomla/application/component/view.php
Documentation is available at view.php
* @version $Id: view.php 10381 2008-06-01 03:35:53Z pasamio $
* @package Joomla.Framework
* @subpackage Application
* @copyright Copyright Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved.
* @license GNU/GPL, see LICENSE.php
* Joomla! is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See COPYRIGHT.php for copyright notices and details.
// Check to ensure this file is within the rest of the framework
* Base class for a Joomla View
* Class holding methods for displaying presentation data.
* @package Joomla.Framework
* @subpackage Application
* The base path of the view
* The set of search directories for resources (templates)
* The name of the default template source file.
* The output of the template script.
var $_escape =
'htmlspecialchars';
* Charset to use in escaping mechanisms; defaults to urf8 (UTF-8)
if (empty( $this->_name ))
$this->_name =
$config['name'];
// set the charset (used by the variable escaping functions)
$this->_charset =
$config['charset'];
// user-defined escaping callback
// Set a base path for use by the view
// set the default template search path
$this->_setPath('template', $config['template_path']);
// set the default helper search path
$this->_setPath('helper', $config['helper_path']);
* Execute and display a template script.
* @param string $tpl The name of the template file to parse;
* automatically searches through the template paths.
* @throws object An JError object.
* Assigns variables to the view script via differing strategies.
* This method is overloaded; you can assign all the properties of
* an object, an associative array, or a single value by name.
* You are not allowed to set variables that begin with an underscore;
* these are either private properties for JView or private variables
* within the template script itself.
* $view->var1 = 'something';
* // assign by name and value
* $view->assign('var1', 'something');
* $view->assign('var2', 'else');
* // assign by assoc-array
* $ary = array('var1' => 'something', 'var2' => 'else');
* $obj->var1 = 'something';
* @return bool True on success, false on failure.
// get the arguments; there may be 1 or 2.
// assign public properties
if (substr($key, 0, 1) !=
'_') {
// assign by associative array
foreach ($arg0 as $key =>
$val)
if (substr($key, 0, 1) !=
'_') {
// assign by string name and mixed value.
// we use array_key_exists() instead of isset() becuase isset()
// fails if the value is set to null.
// $arg0 was not object, array, or string.
* Assign variable for the view (by reference).
* You are not allowed to set variables that begin with an underscore;
* these are either private properties for JView or private variables
* within the template script itself.
* // assign by name and value
* $view->assignRef('var1', $ref);
* @param string $key The name for the reference in the view.
* @param mixed &$val The referenced variable.
* @return bool True on success, false on failure.
* Escapes a value for output in a view script.
* If escaping mechanism is one of htmlspecialchars or htmlentities, uses
* {@link $_encoding} setting.
* @param mixed $var The output to escape.
* @return mixed The escaped value.
if (in_array($this->_escape, array('htmlspecialchars', 'htmlentities'))) {
return call_user_func($this->_escape, $var, ENT_COMPAT, $this->_charset);
* Method to get data from a registered model or a property of the view
* @param string The name of the method to call on the model, or the property to get
* @param string The name of the model to reference, or the default value [optional]
* @return mixed The return value of the method
function &get( $property, $default =
null )
// If $model is null we use the default 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($property);
// Does the method exist?
// The method exists, lets call it and return what we get
$result =
$this->_models[$model]->$method();
// degrade to JObject::get
$result =
parent::get( $property, $default );
* Method to get the model object
* @param string $name The name of the model (optional)
* @return mixed JModel object
* @return string The layout name
* 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
* @return string The name of the model
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'.");
* 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
* @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 )
* Sets the layout name to use
* @param string $template The template name.
* @return string Previous value
* Allows a different extension for the layout files to be used
* @param string The extension
* @return string Previous value
* Sets the _escape() callback.
* @param mixed $spec The callback for _escape() to use.
* Adds to the stack of view script paths in LIFO order.
* @param string|arrayThe directory (-ies) to add.
* Adds to the stack of helper script paths in LIFO order.
* @param string|arrayThe directory (-ies) to add.
* Load a template file -- first look in the templates folder for an override
* @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.
global $mainframe, $option;
//create the template file name based on the layout
// load the template script
$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
// never allow a 'this' property
if (isset
($this->this)) {
// start capturing output into a buffer
// 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
* @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
// load the template script
$helper =
JPath::find($this->_path['helper'], $this->_createFileName('helper', array('name' =>
$file)));
// include the requested template filename in the local scope
* Sets an entire array of search paths for templates or resources.
* @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.
global $mainframe, $option;
// clear out the prior search dirs
$this->_path[$type] =
array();
// actually add the user-specified directories
// always add the fallback directories as last resort
// set the alternative template search dir
$fallback =
JPATH_BASE.
DS.
'templates'.
DS.
$mainframe->getTemplate().
DS.
'html'.
DS.
$option.
DS.
$this->getName();
* Adds to the search path for templates and resources.
* @param string|array$path The directory or stream to search.
// loop through the path directories
// no surrounding spaces allowed!
// add trailing separators as needed
if (substr($dir, -
1) !=
DIRECTORY_SEPARATOR) {
$dir .=
DIRECTORY_SEPARATOR;
// add to the top of the search dirs
* Create the filename for a resource
* @param string $type The resource type to create the filename for
* @param array $parts An associative array of filename information
* @return string The filename
function _createFileName($type, $parts =
array())