<?PHP
require_once('api/buyers.php');
class View extends Buyers
{
    /* Смысл конструктора в доступности следующих переменных в любом View */
    public $page;
    public $session;
    protected $modules_dir = 'view/';
    private static $view_instance;

    public function __construct()
    {
        if(self::$view_instance)
        {
            $this->page         = &self::$view_instance->page;
            $this->session      = &self::$view_instance->sessions->session;
        }
        else
        {
            self::$view_instance = $this;

            $this->page = $this->pages->get_page($this->routes->first);
            $this->session = $this->sessions->session;

            // Передача config, settings, routes в шаблонизатор осуществляется в классе Design
            $pages = $this->pages->get_all_pages();

            $this->design->assign('page',     $this->page);
            $this->design->assign('pages',    $pages);
            $this->design->assign('session',  $this->session);
        }
    }

    /* Инициализация модуля для работы */
    function fetch()
    {
        // Текущий модуль (для отображения центрального блока)
        $module = $this->routes->module;
        $module_file = $this->modules_dir . $module . '.php';

        $this->design->assign("module",  $module);

        if (!file_exists($module_file))
            throw new Exception("Module file {$module_file} not found.");

        require_once($module_file);

        if (!class_exists($module))
            throw new Exception("Class {$module} not found in module file.");

        $main = new $module();

        // Создаем основной блок страницы
        if (!$content = $main->fetch())
            return false;

        $this->design->assign("content", $content);

        // Создаем текущую обертку сайта (обычно index.tpl)
        if(!$wrapper = $this->design->get_var('wrapper'))
            $wrapper = 'index.tpl';

        //если есть обертка то вложим в неё контент
        return !empty($wrapper) ? $this->design->fetch($wrapper) : $content;
    }
}
