-
Notifications
You must be signed in to change notification settings - Fork 0
/
Layout.php
151 lines (125 loc) · 2.73 KB
/
Layout.php
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
<?php
/**
* Un bloc représente une partie de HTML à "render", soit une vue, soit un Layout
*
*/
class Block {
/**
* CodeIgniter superobject instance
*
* @var object
* @access protected
*/
protected $CI;
/**
* Le nom complet de la vue typique CI
* @var string
*/
protected $view;
/**
* Le tableaau de données de la vue pour le load->view() de cette vue
* @var string
*/
protected $data;
/**
* Le marqueur indiquant où ce bloc doit être inclus dans la vue du layout père
* @var string
*/
protected $marker;
public function __construct()
{
$this->CI =& get_instance();
}
/**
* Indique la vue correspondant au bloc
*/
public function setView($view, $marker = null, $data = null) {
$this->view = $view;
$this->marker = $marker;
$this->data = $data;
}
public function getView() {
return $this->view;
}
public function getData() {
return $this->data;
}
public function getMarker() {
return $this->marker;
}
/**
* Surchargée par Layout et ViewLayout
*/
protected function render(){
}
}
/*
* Cette classe réprésente non seulement le layout racine chargé par la librairie
* mais également chacun des layouts enfants
* Cette classe est donc un Bloc
*
*/
class Layout extends Block {
/**
* Liste des blocs du layout, soit une vue soit un autre layout
* @var unknown_type
*/
protected $blocks = array();
public function __construct()
{
parent::__construct();
}
/**
* Ajoute une nouvelle vue enfant
*/
public function addView($name, $marker, $data = null){
$newView = new ViewLayout();
$newView->setView($name, $marker, $data);
$this->blocks[] = $newView;
}
/**
* Ajoute un nouveau layout enfant
*/
public function addLayout($layout){
$this->blocks[] = $layout;
}
/**
* Lance le render global de toutes les vues et sous-layouts
*/
public function renderAll(){
$contents = array();
foreach($this->blocks as $block) {
$contents[$block->getMarker()] = $block->render();
}
if($this->data != null){
$contents = array_merge($contents, $this->data);
}
$this->CI->load->view($this->view, $contents, false);
}
/**
* Render tous les blocs du layout
*/
protected function render(){
$contents = array();
foreach($this->blocks as $block) {
$contents[$block->getMarker()] = $block->render();
}
if($this->data != null){
$contents = array_merge($contents, $this->data);
}
return $this->CI->load->view($this->view, $contents, true);
}
}
/*
* Cette classe représente une vue incluse dans un Layout
*
*/
class ViewLayout extends Block {
/**
* Render la vue
*/
protected function render(){
return $this->CI->load->view($this->getView(), $this->getData(), true);
}
}
/* End of file Layout.php */