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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
|
<?php
include_once("XmlPhp.php");
/*===============================================================
Esta clase implementa la apariencia y comportamiento de un treeview en código HTML y javascript.
La clase utiliza la clase XmlPhp.php para acceder al documento XML.
Parámetros del constructor:
-fXML=Fichero XML
-fileocade=Indica si el dato anterior es un fichero o una variable con el contenido del árbol
0: Es una cadena
1: Es un fichero
-baseurlimg= Url base de las imágenes de los nodos de contracción-expansión
-clasedefault=Clase por defecto de los literales de los nodos
-nivelexp= Máximo nivel que aparecera expandido
-x= Posición x donde aparecerá la tabla
-y= Posición y donde aparecerá la tabla
=================================================================*/
class ArbolVistaXML{
var $baseurlimg; // Base de la URL de las imágenes de los nodos de contracción-expansión
var $clasedefault; // Clase por defecto de los literales de los nodos
var $gXML; // Objeto gestor del documento XML
var $nivelexp; // Nivel máximo que aprecerá visible
var $x; // Posición x donde aparecerá la tabla
var $y; // Posición y donde aparecerá la tabla
var $c_imgnivel=array(); // Imagenes de expansión y contracción para los distintos niveles
var $v_imgnivel=array(); // Valores de expansión y contracción para los distintos niveles
var $nodos_count; // Contador de nodo
Function ArbolVistaXML($fXML,$fileocade,$baseurlimg="/.images/",$clasedefault,$nivelexp=0,$x=0,$y=0,$tipotabla=0,$titulotabla=""){
// Constructor
$this->gXML=new XmlPhp($fXML,$fileocade);
$this->baseurlimg=$baseurlimg;
$this->clasedefault=$clasedefault;
$this->nivelexp=$nivelexp;
$this->x=$x;
$this->y=$y;
$this->tipotabla=$tipotabla;
$this->titulotabla=$titulotabla;
// Anchura de los distibtos tipos de tablas
if($this->tipotabla>0){
$this->anchoM=" width=100% ";
$this->ancho=" width=100% ";
}
else{
$this->anchoM=" width=100% ";
$this->ancho="";
}
for($i=0;$i<=5;$i++){ // Inicializar
$this->c_imgnivel[$i]=$this->baseurlimg.'/nada.gif';
$this->v_imgnivel[$i]="nada";
}
$this->nodos_count=0;
}
/*------------------------------------------------------------------------------------------------
Esta función devuelve una cadena con el contenido de un treeview en código HTML
------------------------------------------------------------------------------------------------*/
Function CreaArbolVistaXML(){
if (!$this->gXML->NodoRaiz()) return; // No existe documento XML que analizar
$arbol_total='<TABLE border=0 '.$this->anchoM.' class="'.$this->clasedefault. '" style="POSITION:absolute;TOP:'.$this->y.'px;LEFT:'.$this->x.'px" class=texto_arbol cellspacing=0 cellpadding=0 border=0>';
if($this->tipotabla>0) $arbol_total.='<TR><TH>'. $this->titulotabla .'</TH></TR>';
$arbol_total.='<TR style="display:block">';
$arbol_total.='<TD>';
$arbol_total.='<TABLE id=tablanivel-0 border=0 cellspacing=0 cellpadding="0">';
$arbol_total.=$this->_arbolXmlrecur(0);
$arbol_total.='</TABLE>';
$arbol_total.='</TD>';
$arbol_total.='</TR>';
$arbol_total.='</TABLE>';
return($arbol_total);
}
// -------------------------------------------------------------------------------------
// Recorrido recursivo del arbol XML
// Parámetros:
// nivel: nivel del nodo
// -------------------------------------------------------------------------------------
function _arbolXmlrecur($nivel){
$arbol_total="";
if ($nivel+1>$this->nivelexp) $displai="none"; else $displai="block";
do{
$gnptr=$this->gXML->nptr;
$arbol_total.='<TR style="display:block" id=TRNodo-'.$this->nodos_count.'>';
$arbol_total.='<TD>';
$arbol_total.=$this->_dibujo_nodo($this->gXML->Nodo(),$nivel,$this->gXML->NumerodeHijos(),$this->gXML->EsUltimoHermano());
$arbol_total.='</TD>';
$arbol_total.='</TR>';
$this->nodos_count++;
if ($this->gXML->PrimerNodoHijo()){
$arbol_total.='<TR id="TRNodoHijo-'.$this->nodos_count.'" style="display:'.$displai.'">';
$arbol_total.='<TD>';
$arbol_total.='<TABLE id="tablanivel-'.($nivel+1).'" border=0 cellspacing=0 cellpadding=0>';
$arbol_total.=$this->_arbolXmlrecur($nivel+1);
$arbol_total.='</TABLE>';
$arbol_total.='</TD>';
$arbol_total.='</TR>';
}
$this->gXML->nptr=$gnptr;
}while($this->gXML->SiguienteNodoHermano());
return($arbol_total);
}
// -------------------------------------------------------------------------------------
// Crea un nodo
// Parámetros:
// nivel: nivel del nodo
// -------------------------------------------------------------------------------------
function CreaNodo($nivel){
$nodo=$this->_dibujo_nodo($this->gXML->Nodo(),$nivel,0,true);
return($nodo);
}
/*------------------------------------------------------------------------------------------------
Dibuja los nodos del árbol
parámetros:
nodo: La información del nodo
nivel: Nivel del nodo
nhijos: numero de hijos
uhermano: Es true si el nodo es el último de sus hermanos
Especificaciones:
Los atributos de los nodos pueden ser HTML o especificos de
esta aplicación. Lso atributos del nodo propios de ésta son:
- clicksupimg: Función suplementaria de la imagen de signo
- imagenid: Identificador de la imagen de signo
- clickimg: La función que se ejecutará al hacer click sobre la imagen de nodo
- downimg: La función que se ejecutará al pulsar el ratón sobre la imagen de nodo
- clickcontextualimg: Función que se ejecutara al hacer click con el boton derecho sobre la imagen del nodo
- imagenodo: Es la url de la imagen de nodo
- infonodo: Es texto que se visualiza del nodo
- mouseovernodo: La función a ejecutar cuando se posa el ratón sobre el literal del nodo
- clicksupnodo: Función suplementaria del literal del nodo
- clickcontextualnodo: Función que se ejecutara al hacer click con el boton derecho sobre el nodo
- classnodo: Clase (style) a la que pertenece el nodo
- nodoid: identificador del nodo
- nodovalue: parametro value del nodo
------------------------------------------------------------------------------------------------*/
function _dibujo_nodo($nodo,$nivel,$nhijos,$uhermano){
// Comprobar descendencia y posición dentro de los hermanos
$swu=false; // switch para saber si el nodo es el último hermano
$swh=false; // switch para saber si el nodo tiene hijos
if ($nhijos>0) $swh=true;
$swu=$uhermano;
if ($swh){ // Si tiene hijos ..
if ($swu){ // Si es el último de sus hermanos ..
if ($nivel<$this->nivelexp){
$this->c_imgnivel[$nivel]=$this->baseurlimg.'/menos_c.gif';
$this->v_imgnivel[$nivel]="menos_c";
}
else{
$this->c_imgnivel[$nivel]=$this->baseurlimg.'/mas_c.gif';
$this->v_imgnivel[$nivel]="mas_c";
}
}
else{ // Si NO lo es ..
if ($nivel<$this->nivelexp){
$this->c_imgnivel[$nivel]=$this->baseurlimg.'/menos_t.gif';
$this->v_imgnivel[$nivel]="menos_t";
}
else{
$this->c_imgnivel[$nivel]=$this->baseurlimg.'/mas_t.gif';
$this->v_imgnivel[$nivel]="mas_t";
}
}
if ($nivel==0){
if ($this->nivelexp>0)
$this->c_imgnivel[$nivel]=$this->baseurlimg.'/menos_root.gif';
else
$this->c_imgnivel[$nivel]=$this->baseurlimg.'/mas_root.gif';
}
}
else{ // Si NO tiene hijos ..
if ($swu){ // Si es el último de sus hermanos ..
$this->c_imgnivel[$nivel]=$this->baseurlimg.'/nada_c.gif';
$this->v_imgnivel[$nivel]="nada_c";
}
else{ // Si no lo es ..
$this->c_imgnivel[$nivel]=$this->baseurlimg.'/nada_t.gif';
$this->v_imgnivel[$nivel]="nada_t";
}
}
// Fin Comprobar descendencia y posición dentro de los hermanos
if($this->tipotabla==0)
$arbol='<TABLE border=0 cellspacing=0 cellpadding=0>';
else
$arbol='<TABLE style="BORDER-BOTTOM:#000000 1px solid;" border=0 cellspacing=0 cellpadding=0>';
$arbol.='<TR height="16px">';
$atributosHTML=" ";
$atributosHTML=$this->gXML->Atributos($nodo);
$colornodo="";
$fondonodo="";
$estilo="";
$atributosHTML=$this->gXML->TomaAtributoEspecial("colornodo",$colornodo,$atributosHTML);
$atributosHTML=$this->gXML->TomaAtributoEspecial("fondonodo",$fondonodo,$atributosHTML);
if ($colornodo!="" ) $colornodo=' COLOR:'.$colornodo.";";
if ($fondonodo!="" ) $fondonodo=' BACKGROUND-COLOR:'.$fondonodo.";";
$estilo=$colornodo || $fondonodo;
if ($estilo!="" ) $estilo='style="'.$colornodo.$fondonodo.'"';
for ($i=0;$i<$nivel;$i++){ // Niveles previos
$arbol.='<TD '.$estilo.'width="3px"></TD>';
$arbol.='<TD '.$estilo.' width="16px"><IMG src="'.$this->c_imgnivel[$i].'" width="16px" height="16px" ></TD>';
}
$arbol.='<TD '.$estilo.' width="3px"></TD>'; // Desplazamiento de la imagen
$arbol.='<TD '.$estilo.' width="16px">';
$imagenid="";
$clicksupimg="";
$atributosHTML=$this->gXML->TomaAtributoEspecial("imagenid",$imagenid,$atributosHTML);
$atributosHTML=$this->gXML->TomaAtributoEspecial("clicksupimg",$clicksupimg,$atributosHTML);
if ($clicksupimg!="") $clicksupimg.=';';
if ($swh){ // El nodo tiene hijos
$arbol.='<A href="#nodo"><IMG border=0 '.$estilo.' id="'.$imagenid.'" onclick="clickImagenSigno(this,' ."'".$this->baseurlimg."'".','.$nivel.');'.$clicksupimg.'" src="'.$this->c_imgnivel[$nivel].'" width="16px" height="16px" value="'.$this->v_imgnivel[$nivel].'"></A></TD>';
}
else
$arbol.='<SPAN><IMG '.$estilo.' id="'.$imagenid.'" src="'.$this->c_imgnivel[$nivel].'" width="16px" height="16px" value="'.$this->v_imgnivel[$nivel].'"></SPAN></TD>';
$imagenodo="";
$clickimg="";
$downimg="";
$clickcontextualimg="";
$styleimg="";
$atributosHTML=$this->gXML->TomaAtributoEspecial("imagenodo",$imagenodo,$atributosHTML);
$atributosHTML=$this->gXML->TomaAtributoEspecial("clickimg",$clickimg,$atributosHTML);
$atributosHTML=$this->gXML->TomaAtributoEspecial("downimg",$downimg,$atributosHTML);
$atributosHTML=$this->gXML->TomaAtributoEspecial("clickcontextualimg",$clickcontextualimg,$atributosHTML);
if ($clickimg!="" ) $clickimg=' onclick="'.$clickimg.'" ';
if ($downimg!="" ) $downimg=' onmousedown="'.$downimg.'" ';
if ($clickcontextualimg!="" ) $clickcontextualimg=' oncontextmenu=" '.$clickcontextualimg.'" ';
if ($clickimg!="" || $downimg!="" || $clickcontextualimg!="" ) $styleimg=' style="cursor:hand"';
$arbol.='<TD '.$estilo.' width=16px><IMG '.$styleimg.' src="'.$imagenodo.'"'.$clickimg.$downimg.$clickcontextualimg.' width="16px" height="16px"></TD>';
$arbol.='<TD '.$estilo.' width="4px"></TD>';
$clicksupnodo="";
$clickcontextualnodo="";
$classnodo="";
$nodoid="";
$nodovalue="";
$mouseovernodo="";
$infonodo="";
$atributosHTML=$this->gXML->TomaAtributoEspecial("clickcontextualnodo",$clickcontextualnodo,$atributosHTML);
$atributosHTML=$this->gXML->TomaAtributoEspecial("clicksupnodo",$clicksupnodo,$atributosHTML);
$atributosHTML=$this->gXML->TomaAtributoEspecial("classnodo",$classnodo,$atributosHTML);
$atributosHTML=$this->gXML->TomaAtributoEspecial("nodoid",$nodoid,$atributosHTML);
$atributosHTML=$this->gXML->TomaAtributoEspecial("nodovalue",$nodovalue,$atributosHTML);
$atributosHTML=$this->gXML->TomaAtributoEspecial("colornodo",$colornodo,$atributosHTML);
$atributosHTML=$this->gXML->TomaAtributoEspecial("fondonodo",$fondonodo,$atributosHTML);
$atributosHTML=$this->gXML->TomaAtributoEspecial("mouseovernodo",$mouseovernodo,$atributosHTML);
$atributosHTML=$this->gXML->TomaAtributoEspecial("infonodo",$infonodo,$atributosHTML);
if ($clickcontextualnodo!="" ) $clickcontextualnodo=' oncontextmenu="'.$clickcontextualnodo.'" ';
if ($mouseovernodo!="" ) $mouseovernodo=' onmouseover="'.$mouseovernodo.'" ';
if ($nodovalue!="" ) $nodovalue=' value="'.$nodovalue.'" ';
if (!$classnodo) $classnodo=$this->clasedefault;
$arbol.='<TD width="1024px" '.$estilo.' class="'.$classnodo.'">';
$arbol.='<A href="#nodo" class="'.$this->clasedefault. '" style="text-decoration: none"><SPAN id="'.$nodoid.'" ';
if($this->tipotabla<2){
$arbol.=' onclick="clickLiteralNodo(this ,' ."'".$this->baseurlimg."'".');';
$arbol.=" ".$clicksupnodo.'"'.$nodovalue.$mouseovernodo.$clickcontextualnodo;
}
$arbol.=' >'.$infonodo.'</SPAN></A></TD>';
$arbol.='</TR>';
$arbol.='</TABLE>';
if ($swu)
$this->c_imgnivel[$nivel]=$this->baseurlimg.'/nada.gif';
else
$this->c_imgnivel[$nivel]=$this->baseurlimg.'/nada_l.gif';
return($arbol);
}
} // Fin de la clase
|