joomla_test/libraries/joomla/view/html.php
2020-01-02 22:20:31 +07:00

202 lines
3.5 KiB
PHP

<?php
/**
* @package Joomla.Platform
* @subpackage View
*
* @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
jimport('joomla.filesystem.path');
/**
* Joomla Platform HTML View Class
*
* @package Joomla.Platform
* @subpackage View
* @since 12.1
*/
abstract class JViewHtml extends JViewBase
{
/**
* The view layout.
*
* @var string
* @since 12.1
*/
protected $layout = 'default';
/**
* The paths queue.
*
* @var SplPriorityQueue
* @since 12.1
*/
protected $paths;
/**
* Method to instantiate the view.
*
* @param JModel $model The model object.
* @param SplPriorityQueue $paths The paths queue.
*
* @since 12.1
*/
public function __construct(JModel $model, SplPriorityQueue $paths = null)
{
parent::__construct($model);
// Setup dependencies.
$this->paths = isset($paths) ? $paths : $this->loadPaths();
}
/**
* Magic toString method that is a proxy for the render method.
*
* @return string
*
* @since 12.1
*/
public function __toString()
{
return $this->render();
}
/**
* Method to escape output.
*
* @param string $output The output to escape.
*
* @return string The escaped output.
*
* @see JView::escape()
* @since 12.1
*/
public function escape($output)
{
// Escape the output.
return htmlspecialchars($output, ENT_COMPAT, 'UTF-8');
}
/**
* Method to get the view layout.
*
* @return string The layout name.
*
* @since 12.1
*/
public function getLayout()
{
return $this->layout;
}
/**
* Method to get the layout path.
*
* @param string $layout The layout name.
*
* @return mixed The layout file name if found, false otherwise.
*
* @since 12.1
*/
public function getPath($layout)
{
// Get the layout file name.
$file = JPath::clean($layout . '.php');
// Find the layout file path.
$path = JPath::find(clone($this->paths), $file);
return $path;
}
/**
* Method to get the view paths.
*
* @return SplPriorityQueue The paths queue.
*
* @since 12.1
*/
public function getPaths()
{
return $this->paths;
}
/**
* Method to render the view.
*
* @return string The rendered view.
*
* @since 12.1
* @throws RuntimeException
*/
public function render()
{
// Get the layout path.
$path = $this->getPath($this->getLayout());
// Check if the layout path was found.
if (!$path)
{
throw new RuntimeException('Layout Path Not Found');
}
// Start an output buffer.
ob_start();
// Load the layout.
include $path;
// Get the layout contents.
$output = ob_get_clean();
return $output;
}
/**
* Method to set the view layout.
*
* @param string $layout The layout name.
*
* @return JViewHtml Method supports chaining.
*
* @since 12.1
*/
public function setLayout($layout)
{
$this->layout = $layout;
return $this;
}
/**
* Method to set the view paths.
*
* @param SplPriorityQueue $paths The paths queue.
*
* @return JViewHtml Method supports chaining.
*
* @since 12.1
*/
public function setPaths(SplPriorityQueue $paths)
{
$this->paths = $paths;
return $this;
}
/**
* Method to load the paths queue.
*
* @return SplPriorityQueue The paths queue.
*
* @since 12.1
*/
protected function loadPaths()
{
return new SplPriorityQueue;
}
}