Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
$page->fillings['title'] = new VariableView('greating');
abstract class AbstractView {
/**
* @var AbstractView[]
*/
protected $views = array();
abstract function draw();
/**
* @param string $key
* @param AbstractView $view
*/
public function addView($key, AbstractView $view) {
$this->views[(string)$key] = $view;
}
/**
* Рендерит отображение
*
* @param string $key
*
* @return string
* @throws InvalidArgumentException
*/
final public function render($key) {
$key = (string)$key;
if (!isset($this->views[$key]))
throw new InvalidArgumentException('Представление по ключу '.$key.' не найдено');
ob_start();
$this->views[$key]->draw();
return ob_get_clean();
}
}
class LayoutView extends AbstractView {
function draw() {
/* ваш код */
}
}
class SubView extends AbstractView {
function draw() {
/* ваш код */
}
}
$view = new LayoutView();
$subView = new SubView();
$view->addView('content', $subView);
echo $view->render('content');
if(isset($this->fillings[$filling_name])){
$this->fillings[$filling_name]->draw();
}
echo $view->render('content');echo $view->draw();?echo $view->render('content'); это уже непосредственно вставка html — аналог вашего insert
Реализация паттерна Компоновщик (Composite pattern) на php