124 lines
2.6 KiB
PHP
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;
|
|
}
|
|
|
|
}
|
|
|
|
?>
|