forked from sbrocos/IF
-
Notifications
You must be signed in to change notification settings - Fork 0
/
View.php
141 lines (120 loc) · 3.71 KB
/
View.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
<?php
/**
* Clase que gestiona las Vistas de la aplicación
* @author sbrocos
* @version v.0.2
*/
class IF_VIEW
{
protected $_path;
protected $_layout;
protected $_pathView;
protected $_params;
/**
* Constructor de la clase
* @param array $parametros
*/
public function __construct(array $parametros = null)
{
$this->_gestionError($parametros);
$this->_path = APP_PATH . '/main/views/' . $parametros['controller'];
foreach ($parametros as $key=>$val) {
$this->_params[$key] = $val;
}
if (!file_exists($this->_path)) {
$message = utf8_decode("Carpeta e vistas (view) no encontrada path:" . $this->_path);
die($message);
}
$this->setLayout();
}
/**
* Función que renderiza la página.
* @param array $view_callback
* @param boolean $renderLayout
*/
public function renderPHP($view_callback, $renderLayout)
{
$controller = strtolower($this->_params['controller']);
$this->_params['view_callback'] = $view_callback;
if ($renderLayout) {
include_once APP_PATH_LAYOUT. '/' . $this->_layout;
} else {
$this->contenido();
}
}
public function renderAjax($view_callback = null)
{
$action = strtolower($this->_params['action']);
if ($view_callback){
extract($view_callback);
}
ob_start();
include_once $this->_path . "/$action.php";
ob_end_flush();
}
/**
*
*/
public function contenido()
{
$action = strtolower($this->_params['action']);
extract($this->_params['view_callback']);
ob_start();
$path_view = $this->_path . "/$action.php";
include $path_view;
ob_end_flush();
}
/**
* Función que gestiona algunos errores básicos
* @param array $parametros
* @throws Exception
*/
protected function _gestionError(array $parametros = null)
{
if (is_null($parametros)) {
$error = "FATAL ERROR: no hay parametros para crear la vista";
} elseif (!is_array( $parametros)) {
$error = "FATAL ERROR: no hay parametros para crear la vista";
} if (!key_exists('controller', $parametros) && key_exists('action', $parametros)) {
$error = "FATAL ERROR: no especificado Controller o Action";
} else {
$error = false;
}
if( $error ) {
//TODO gestionar el error de manera pertinente.
throw new Exception( $error );
exit;
}
}
/**
* Función que establece con que Layout se va a trabajar
* @param string $layoutName
*/
public function setLayout($layoutName = null)
{
if (!$layoutName) {
$layoutName = $this->_params['layout'];
}
if (!file_exists( APP_PATH_LAYOUT . '/' . $layoutName)) {
$message = utf8_decode( "No se ha encontrado el layout por defecto." );
die( $message);
} else {
$this->_layout = $layoutName;
}
}
/**
* Función para definir cuál será la vista asociada a la action por el usuario
* @param string $viewName
*/
public function setView($viewName = null)
{
if ($viewName) {
if (!file_exists( $this->_path . "/$viewName.phtml")) {
$this->_params['action'] = $viewName;
} else {
//todo gestion error
die("Error vista no encontrada");
}
}
}
}