84 lines
1.9 KiB
PHP
84 lines
1.9 KiB
PHP
<?php
|
|
|
|
|
|
namespace Nextend\Framework\View;
|
|
|
|
|
|
use Nextend\Framework\Pattern\GetPathTrait;
|
|
use Nextend\Framework\Pattern\MVCHelperTrait;
|
|
use Nextend\Framework\Sanitize;
|
|
|
|
abstract class AbstractLayout {
|
|
|
|
use GetPathTrait;
|
|
use MVCHelperTrait;
|
|
|
|
/** @var AbstractView */
|
|
protected $view;
|
|
|
|
/**
|
|
* @var AbstractBlock[]|string[]|array[]
|
|
*/
|
|
protected $contentBlocks = array();
|
|
|
|
protected $state = array();
|
|
|
|
/**
|
|
* AbstractLayout constructor.
|
|
*
|
|
* @param AbstractView $view
|
|
*
|
|
*/
|
|
public function __construct($view) {
|
|
$this->view = $view;
|
|
|
|
$this->setMVCHelper($view);
|
|
|
|
$this->getApplicationType()
|
|
->setLayout($this);
|
|
|
|
$this->enqueueAssets();
|
|
}
|
|
|
|
protected function enqueueAssets() {
|
|
|
|
$this->getApplicationType()
|
|
->enqueueAssets();
|
|
}
|
|
|
|
/**
|
|
* @param string $html contains already escaped data
|
|
*/
|
|
public function addContent($html) {
|
|
|
|
$this->contentBlocks[] = $html;
|
|
}
|
|
|
|
/**
|
|
* @param AbstractBlock $block contains already escaped data
|
|
*/
|
|
public function addContentBlock($block) {
|
|
|
|
$this->contentBlocks[] = $block;
|
|
}
|
|
|
|
public function displayContent() {
|
|
foreach ($this->contentBlocks as $content) {
|
|
if (is_string($content)) {
|
|
// PHPCS - Content already escaped
|
|
echo $content; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
|
} else if (is_array($content)) {
|
|
// PHPCS - Content already escaped
|
|
echo call_user_func_array($content[0], $content[1]); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
|
} else {
|
|
$content->display();
|
|
}
|
|
}
|
|
}
|
|
|
|
public function setState($name, $value) {
|
|
$this->state[$name] = $value;
|
|
}
|
|
|
|
public abstract function render();
|
|
} |