You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
1.7 KiB

<?php namespace Majestic\Layout;
/**
* @copyright NetMonsters <team@netmonsters.ru>
* @link http://netmonsters.ru
* @package Majestic
* @subpackage Layout
* @since 2010-02-25
*/
abstract class Layout
{
protected $template;
/**
* @var \Majestic\View\PHPView
*/
protected $view;
public function __construct()
{
$this->view = \Majestic\App\FrontController::getInstance()->getView();
}
/**
* @param string $name
* @param \Majestic\App\Action $action
*/
protected function assign($name, $action)
{
$this->view->assign($name, $action->fetch());
}
/**
* @param string $name
* @param \Majestic\App\Action $action
*/
protected function append($name, $action)
{
$this->view->append($name, $action->fetch());
}
/**
* @param string $name
* @param \Majestic\App\Action $action
*/
protected function prepend($name, $action)
{
$this->view->prepend($name, $action->fetch());
}
abstract protected function execute();
/**
* Execute Action, insert action's result html into layout template and return Layout html
* @param \Majestic\App\Action $action
* @return string
*/
public function fetch($action)
{
$this->view->assign('content', $action->fetch());
$this->execute();
return $this->view->fetch($this->getTemplate());
}
/**
* Return content of template
* @return string
*/
protected function getTemplate()
{
$template = ($this->template) ? $this->template : substr(get_class($this), 0, -6/*strlen('Layout')*/);
return '/layouts/' . $template;
}
}