AbstractLayout.php
1.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?php
namespace Nextend\Framework\View;
use Nextend\Framework\Pattern\GetPathTrait;
use Nextend\Framework\Pattern\MVCHelperTrait;
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
*/
public function addContent($html) {
$this->contentBlocks[] = $html;
}
/**
* @param AbstractBlock $block
*/
public function addContentBlock($block) {
$this->contentBlocks[] = $block;
}
public function displayContent() {
foreach ($this->contentBlocks as $content) {
if (is_string($content)) {
echo $content;
} else if (is_array($content)) {
echo call_user_func_array($content[0], $content[1]);
} else {
$content->display();
}
}
}
public function setState($name, $value) {
$this->state[$name] = $value;
}
public abstract function render();
}