Source for file view.php
Documentation is available at view.php
* @package FrameworkOnFramework
* @copyright Copyright (C) 2010 - 2012 Akeeba Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
// Protect from unauthorized access
* FrameworkOnFramework View class. The View is the MVC component which gets the
* raw data from a Model and renders it in a way that makes sense. The usual
* rendering is HTML, but you can also output JSON, CSV, XML, or even media
* (images, videos, ...) and documents (Word, PDF, Excel...).
* @package FrameworkOnFramework
* The base path of the view
* The set of search directories for resources (templates)
protected $_path =
array('template' =>
array(), 'helper' =>
array());
* The name of the default template source file.
* The output of the template script.
protected $_escape =
'htmlspecialchars';
* Charset to use in escaping mechanisms; defaults to urf8 (UTF-8)
* The available renderer objects we can use to render views
* @var array Contains objects of the FOFRenderAbstract class
public static $renderers =
array();
* Cache of the configuration array
* The input object of this view
* The chosen renderer object
* Should I run the pre-render step?
* Should I run the post-render step?
* Public constructor. Instantiates a FOFView object.
* @param array $config The configuration data array
// Make sure $config is an array
$config = (array)
$config;
if ($config['input'] instanceof
FOFInput)
$this->input =
$config['input'];
$component =
'com_foobar';
// Get the component name
if ($config['input'] instanceof
FOFInput)
$tmpInput =
$config['input'];
$tmpInput =
new FOFInput($config['input']);
$component =
$tmpInput->getCmd('option', '');
$tmpInput =
$this->input;
$component =
$config['option'];
$config['option'] =
$component;
$view =
$tmpInput->getCmd('view', '');
// Set the component and the view to the input array
$tmpInput->set('option', $config['option']);
$tmpInput->set('view', $config['view']);
$this->_name =
$config['name'];
$this->_name =
$config['view'];
$tmpInput->set('view', $this->_name);
$config['input'] =
$tmpInput;
$config['name'] =
$this->_name;
$config['view'] =
$this->_name;
// Get the component directories
// Set the charset (used by the variable escaping functions)
JLog::add('Setting a custom charset for escaping is deprecated. Override FOFView::escape() instead.', JLog::WARNING, 'deprecated');
// 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']);
$this->baseurl =
JURI::base(true);
* Loads a template given any path. The path is in the format:
* [admin|site]:com_foobar/viewname/templatename
* e.g. admin:com_foobar/myview/default
* This function searches for Joomla! version override templates. For example,
* if you have run this under Joomla! 3.0 and you try to load
* admin:com_foobar/myview/default it will automatically search for the
* template files default.j30.php, default.j3.php and default.php, in this
* @param string $path See above
* @param array $forceParams A hash array of variables to be extracted in the local scope of the template file
* @return boolean False if loading failed
// Automatically check for a Joomla! version specific override
$throwErrorIfNotFound =
true;
foreach ($suffixes as $suffix)
$throwErrorIfNotFound =
false;
if ($throwErrorIfNotFound)
foreach ($suffixes as $suffix)
$templateParts =
$this->_parseTemplatePath($path);
$paths[] =
$templatePath .
'/' .
$templateParts['view'];
$paths[] =
($templateParts['admin'] ?
$componentPaths['admin'] :
$componentPaths['site']) .
'/views/' .
$templateParts['view'] .
'/tmpl';
// Look for a template override
if (isset
($layoutTemplate) &&
$layoutTemplate !=
'_' &&
$layoutTemplate !=
$template)
$filetofind =
$templateParts['template'] .
'.php';
$this->_tempFilePath =
JPath::find($paths, $filetofind);
if ($this->_tempFilePath)
// Unset from local scope
// Never allow a 'this' property
// Force parameters into scope
if (!empty($forceParams))
// Start capturing output into a buffer
// Include the requested template filename in the local scope (this will execute the view logic).
include $this->_tempFilePath;
// Done with the requested template; get the buffer and clear it.
if ($throwErrorIfNotFound)
return new Exception(JText::sprintf('JLIB_APPLICATION_ERROR_LAYOUTFILE_NOT_FOUND', $path), 500);
* Overrides the default method to execute and display a template script.
* Instead of loadTemplate is uses loadAnyTemplate which allows for automatic
* Joomla! version overrides. A little slice of awesome pie!
* @param string $tpl The name of the template file to parse
* @return mixed A string if successful, otherwise a JError object.
public function display($tpl =
null)
if ($result instanceof
Exception)
* 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 FOFView or private variables
* within the template script itself.
* @return boolean True on success, false on failure.
* @deprecated 13.3 Use native PHP syntax.
JLog::add(__METHOD__ .
' is deprecated. Use native PHP syntax.', JLog::WARNING, 'deprecated');
// 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()
// because 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 FOFView or private variables
* within the template script itself.
* @param string $key The name for the reference in the view.
* @param mixed &$val The referenced variable.
* @return boolean True on success, false on failure.
* @deprecated 13.3 Use native PHP syntax.
JLog::add(__METHOD__ .
' is deprecated. Use native PHP syntax.', JLog::WARNING, 'deprecated');
* Escapes a value for output in a view script.
* If escaping mechanism is either htmlspecialchars or htmlentities, uses
* {@link $_encoding} setting.
* @param mixed $var The output to escape.
* @return mixed The escaped value.
* Method to get data from a registered model or a property of the view
* @param string $property The name of the method to call on the model or the property to get
* @param string $default The name of the model to reference or the default value [optional]
* @return mixed The return value of the method
public function get($property, $default =
null)
// If $model is null we use the default model
// First check to make sure the model requested exists
// Model exists, let's build the method name
$method =
'get' .
ucfirst($property);
// Does the method exist?
// The method exists, let's 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 FOFModel object
* @return string The layout name
* Get the layout template.
* @return string The layout template 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
$viewpos =
strpos($classname, 'View');
throw
new Exception(JText::_('JLIB_APPLICATION_ERROR_VIEW_GET_NAME'), 500);
* Method to add a model to the view.
* @param FOFMOdel $model The model to add to the view.
* @param boolean $default Is this the default model?
* @param String $name optional index name to store the model
* @return object The added model.
public function setModel($model, $default =
false, $name =
null)
$name =
$model->getName();
* Sets the layout name to use
* @param string $layout The layout name or a string in format <template>:<layout file>
* @return string Previous value.
if (strpos($layout, ':') ===
false)
// Convert parameter to array based on :
* Allows a different extension for the layout files to be used
* @param string $value The extension.
* @return string Previous value
* Sets the _escape() callback.
* @param mixed $spec The callback for _escape() to use.
* @deprecated 2.1 Override FOFView::escape() instead.
JLog::add(__METHOD__ .
' is deprecated. Override FOFView::escape() instead.', JLog::WARNING, 'deprecated');
* Adds to the stack of view script paths in LIFO order.
* @param mixed $path A directory path or an array of paths.
* Adds to the stack of helper script paths in LIFO order.
* @param mixed $path A directory path or an array of paths.
* Overrides the built-in loadTemplate function with an FOF-specific one.
* Our overriden function uses loadAnyTemplate to provide smarter view
* @param string $tpl The name of the template file to parse
* @param boolean $strict Should we use strict naming, i.e. force a non-empty $tpl?
* @return mixed A string if successful, otherwise a JError object
$this->input->getCmd('option', ''),
$this->input->getCmd('view', ''),
foreach ($paths as $path)
if (!($result instanceof
Exception))
* Parses a template path in the form of admin:/component/view/layout or
* site:/component/view/layout to an array which can be used by
* loadAnyTemplate to locate and load the view template file.
* @param string $path The template path to parse
* @return array A hash array with the parsed path parts
private function _parseTemplatePath($path =
'')
'component' =>
$this->config['option'],
'view' =>
$this->config['view'],
if (substr($path, 0, 6) ==
'admin:')
elseif (substr($path, 0, 5) ==
'site:')
$pathparts =
explode('/', $path, 3);
switch (count($pathparts))
* Get the renderer object for this view
* @return FOFRenderAbstract
* Sets the renderer object for this view
* @param FOFRenderAbstract &$renderer The render class to use
public function setRenderer(FOFRenderAbstract &$renderer)
* Finds a suitable renderer
* @return FOFRenderAbstract
// Try loading the stock renderers shipped with FOF
if (empty(self::$renderers) ||
!class_exists('FOFRenderJoomla', false))
$path =
dirname(__FILE__
) .
'/../render/';
if (!empty($renderFiles))
foreach ($renderFiles as $filename)
if ($filename ==
'abstract.php')
@include_once $path .
'/' .
$filename;
self::registerRenderer($o);
// Try to detect the most suitable renderer
if (!empty(self::$renderers))
foreach (self::$renderers as $r)
$info =
$r->getInformation();
if ($info->priority >
$priority)
$priority =
$info->priority;
// Return the current renderer
* Registers a renderer object with the view
* @param FOFRenderAbstract &$renderer The render object to register
self::$renderers[] =
$renderer;
* Sets the pre-render flag
* @param boolean $value True to enable the pre-render step
* Sets the post-render flag
* @param boolean $value True to enable the post-render step
* @param string $hlp The name of the helper source file automatically searches the helper paths and compiles as needed.
$file =
preg_replace('/[^A-Z0-9_\.-]/i', '', $hlp);
// Load the template script using the default Joomla! features
$path =
$componentPaths['main'] .
'/helpers';
$path =
$path =
$componentPaths['alt'] .
'/helpers';
// Include the requested template filename in the local scope
* Returns the view's option (component name) and view name in an
'option' =>
$this->config['option'],
'view' =>
$this->config['view'],
* Sets an entire array of search paths for templates or resources.
* @param string $type The type of path to set, typically 'template'.
* @param mixed $path The new search path, or an array of search paths. If null or false, resets to the current directory only.
protected function _setPath($type, $path)
// 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
* Adds to the search path for templates and resources.
* @param string $type The type of path to add.
* @param mixed $path The directory or stream, or an array of either, to search.
protected function _addPath($type, $path)
// 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
Documentation generated on Tue, 19 Nov 2013 15:18:16 +0100 by phpDocumentor 1.4.3