class View {
public $data = []; // все данные тут
public $template = 'default'; // а здесь фрагмент пути к шаблону
// такой конструктор позволяет нам быстро задавать шаблон без лишних движений
public function __construct($template = null)
{
if (!empty($template)) {
$this->template = $template;
}
}
// просто построить полный путь к шаблону
protected function templatePath()
{
// понятия не имею, что из себя представляет Logic::get()
// предполагаю группа представлений
return Logic::get() . "/views/" . $this->template . ".php";
}
// обработать переменные и вернуть результат
public function render()
{
extract($this->data);
ob_start();
if (file_exists($this->templatePath())) {
require $this->templatePath();
} else {
echo 'Template not found!';
}
return ob_get_clean();
}
}
// создаем представление для блока новостей
$newsBlockLayout = new View('layouts/news');
$newsBlockLayout->data['news'] = NewsModel::getRecentNews();
// создаем представление для блока последних записей из блога
$recentPostsBlockLayout = new View('layouts/recentPosts');
$recentPostsBlockLayout->data['posts'] = BlogModel::getRecentPosts();
// а теперь берем представление для нашей главной страницы
$mainPageView = new View('main');
$mainPageView->data['news'] = $newsBlockLayout->render();
$mainPageView->data['posts'] = $recentPostsBlockLayout->render();
echo $mainPageView->render(); // вместо отдачи в браузер можно полученный результат отправить по почте
echo template('30.php', [
'leftPanel' => template('leftPanel.php', left_panel()),
'central' => template('central.php', central()),
'aside' => template('aside.php', aside())
]);