questlab/core/View.inc
2015-04-25 14:09:46 +02:00

124 lines
2.6 KiB
PHP

<?php
/**
* NRE
*
* @author coderkun <olli@coderkun.de>
* @copyright 2013 coderkun (http://www.coderkun.de)
* @license http://www.gnu.org/licenses/gpl.html
* @link http://www.coderkun.de/projects/nre
*/
namespace nre\core;
/**
* View.
*
* Class to encapsulate a template file and to provide rendering methods.
*
* @author coderkun <olli@coderkun.de>
*/
class View
{
/**
* Template filename
*
* @var string
*/
protected $templateFilename;
/**
* Load and instantiate the View of an Agent.
*
* @throws \nre\exceptions\ViewNotFoundException
* @param string $layoutName Name of Layout in use
* @param string $agentName Name of the Agent
* @param string $action Current Action
* @param bool $isToplevel Agent is a ToplevelAgent
*/
public static function loadAndFactory($layoutName, $agentName=null, $action=null, $isToplevel=false)
{
return new View($layoutName, $agentName, $action, $isToplevel);
}
/**
* Construct a new View.
*
* @throws \nre\exceptions\ViewNotFoundException
* @param string $layoutName Name of Layout in use
* @param string $agentName Name of the Agent
* @param string $action Current Action
* @param bool $isToplevel Agent is a ToplevelAgent
*/
protected function __construct($layoutName, $agentName=null, $action=null, $isToplevel=false)
{
// Create template filename
// LayoutName
$fileName = ROOT.DS. \nre\configs\CoreConfig::getClassDir('views').DS. strtolower($layoutName).DS;
// AgentName and Action
if(strtolower($agentName) != strtolower($layoutName) || !$isToplevel) {
$fileName .= strtolower($agentName).DS.strtolower($action);
}
else {
$fileName .= strtolower($layoutName);
}
// File extension
$fileName .= \nre\configs\CoreConfig::getFileExt('views');
// Check template file
if(!file_exists($fileName)) {
throw new \nre\exceptions\ViewNotFoundException($fileName);
}
// Save filename
$this->templateFilename = $fileName;
}
/**
* Generate output
*
* @param array $data Data to have available in the template file
*/
public function render($data)
{
// Extract data
if(!is_null($data)) {
extract($data, EXTR_SKIP);
}
// Buffer output
ob_start();
// Include template
include($this->templateFilename);
// Return buffered output
return ob_get_clean();
}
/**
* Get template filename.
*
* @return string Template filename
*/
public function getTemplateFilename()
{
return $this->templateFilename;
}
}
?>