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
|
<?php
/*==================================================================================================
Clase para trabajar con menús contextuales.
Especificaciones de las etiquetas XML:
- MENUCONTEXTUAL: Elemento raiz en el se especifican los atributos del <DIV>
- ITEM: Especificaciones de cada item.
- SEPARADOR: Indica una linea divisoria entre items
Especificaciones de atributos:
- idctx: Identificador del menu contextual (DIV)
- imgitem: La url de la imagen que acompañará al literal
- alignitem: La alineación del texto del item (por defecto left)
- textoitem: El literal del item
- subflotante: Si el item despliega otro menu contextual. El valor es el id de ése
- maxanchu: Máxima anchura del menu contextual
- swimg: Vale 1 si el menu tiene algún item con imagen y 0 en caso contrario
- alpulsar: Nombre de la función javascript que se ejecutará en respuesta al evento onclick
- clase: Estilo CSS que tendrán los item menu contextual
- origen_x: Posición de origen, coordenada x
- origen_y: Posición de origen, coordenada y
Especificaciones de eventos:
- Los eventos onmouseover y onmouseout están implicitos en la clase por defecto
Especificaciones de submenus:
- Si una opción lleva un submenu asociado el id de éste va en el atributo name del <TR>
==================================================================================================*/
class MenuContextual{
Function MenuContextual($urlImages="../images/flotantes"){
$this->urlImg=$urlImages;
}
/*---------------------------------------------------------------------------------------------
Devuelve una cadena en formato HTML de un layer para usarlo como menu contextual
Parametros:
- cadenaXML: Una cadena en formato XML con los atributos de cada item
---------------------------------------------------------------------------------------------*/
function CreaMenuContextual($cadenaXML){
$idx=0;
$layer="";
$idctx="";
$maxanchu=100;
$swimg=0;
$imgitem="";
$alignitem="";
$textoitem="";
$clase="";
$subflotante="";
$origen_x="0";
$origen_y="0";
$gXML=new XmlPhp($cadenaXML,0);
$gXML->NodoRaiz();
$atributosHTML=$gXML->Atributos();
$atributosHTML=$gXML->TomaAtributoEspecial("maxanchu",$maxanchu,$atributosHTML);
$atributosHTML=$gXML->TomaAtributoEspecial("swimg",$swimg,$atributosHTML);
$atributosHTML=$gXML->TomaAtributoEspecial("clase",$clase,$atributosHTML);
$atributosHTML=$gXML->TomaAtributoEspecial("idctx",$idctx,$atributosHTML);
$atributosHTML=$gXML->TomaAtributoEspecial("origen_x",$origen_x,$atributosHTML);
$atributosHTML=$gXML->TomaAtributoEspecial("origen_y",$origen_y,$atributosHTML);
if(empty($origen_x)) $origen_x=0;
if(empty($origen_y)) $origen_y=0;
if (!$clase) $clase="menu_contextual";
$layer.='<DIV class="'.$clase.'" id="'.$idctx.'" width='.$maxanchu.' style="visibility:hidden;position:absolute;top:'.$origen_y.';left:'.$origen_x.'" >';
$nuitems=2;
if ($gXML->PrimerNodoHijo()){
$layer.='<TABLE border=0 width='.$maxanchu.' border=0 cellspacing=0 cellpadding=0>';
$layer.='<TR width='.$maxanchu.' height=3>'; // Primera linea
$layer.='<TD width=3 background="'.$this->urlImg.'/esi.gif"></TD>';
$layer.='<TD colspan=6 background="'.$this->urlImg.'/lsu.gif"></TD>';
$layer.='<TD width=3 background="'.$this->urlImg.'/esd.gif"></TD>';
$layer.='</TR>';
$layer.='<TR width='.$maxanchu.' height=3>'; // Linea de relleno
$layer.='<TD width=3 background="'.$this->urlImg.'/liz.gif"></TD>';
$layer.='<TD width=3></TD>';
$layer.='<TD colspan=4></TD>';
$layer.='<TD width=3></TD>';
$layer.='<TD width=3 background="'.$this->urlImg.'/ldr.gif"></TD>';
$layer.='</TR>';
do{
$nuitems++;
$atributosHTML=$gXML->Atributos();
$tiponodo=$gXML->NombreNodo();
if ($tiponodo=="ITEM"){
$atributosHTML=$gXML->TomaAtributoEspecial("imgitem",$imgitem,$atributosHTML);
$atributosHTML=$gXML->TomaAtributoEspecial("textoitem",$textoitem,$atributosHTML);
$atributosHTML=$gXML->TomaAtributoEspecial("subflotante",$subflotante,$atributosHTML);
$atributosHTML=$gXML->TomaAtributoEspecial("alpulsar",$alpulsar,$atributosHTML);
$atributosHTML=$gXML->TomaAtributoEspecial("alignitem",$alignitem,$atributosHTML);
if ($alignitem==null) $alignitem="left";
$clickcontextual=' onclick="'.$alpulsar.'" ';
$oncontextual=' onmouseover="sobre_contextual(this)" ';
$offcontextual="";
$idx++;
$layer.='<TR id='.$idx.' name="'.$subflotante.'" width='.$maxanchu.' '.$clickcontextual.' '.$oncontextual.' '.$offcontextual.' height=20>'; // Linea de item
$layer.='<TD width=3 background="'.$this->urlImg.'/liz.gif"></TD>';
$layer.='<TD width=3></TD>';
if ($imgitem!=null){ // Item con imagen
$imgonclick="";
$layer.='<TD width=20 align=center id="TDimg-'.$idx .'"><IMG width=16 src="'.$imgitem.'"></TD>';
$layer.='<TD width=3></TD>';
$layer.='<TD align='.$alignitem.' id="TDLit-'.$idx .'" width='.($maxanchu-38).' '.$atributosHTML.'><A href="#" style="text-decoration: none"><SPAN>'.$textoitem.'</SPAN></A></TD>';
}
else{
if ($swimg==1){ // Hay algún item con imagen
$layer.='<TD width=20></TD>';
$layer.='<TD width=3></TD>';
$layer.='<TD align='.$alignitem.' width='.($maxanchu-38).' '.$atributosHTML.'><A href="#" style="text-decoration: none"><SPAN>'.$textoitem.'</SPAN></A></TD>';
}
else{
$layer.='<TD width=10></TD>';
$layer.='<TD colspan=2 align='.$alignitem.' width='.($maxanchu-25).' ' .$atributosHTML.' ><A href="#" style="text-decoration: none"><SPAN>'.$textoitem.'</SPAN></A></TD>';
}
}
if ($subflotante!=null)
$layer.='<TD valign=middle><IMG width=3 name="swsbfn" align=left src="'.$this->urlImg.'/swsbfn.gif">';
else
$layer.='<TD width=3 >';
$layer.='</TD>';
$layer.='<TD width=3></TD>';
$layer.='<TD width=3 background="'.$this->urlImg.'/ldr.gif"></TD>';
$layer.='</TR>';
}
if ($tiponodo=="SEPARADOR"){ // Separadores
$layer.='<TR width='.$maxanchu.' height=16>'; // Linea de separación
$layer.='<TD width=3 background="'.$this->urlImg.'/liz.gif"></TD>';
$layer.='<TD width=3></TD>';
$layer.='<TD colspan=4 background="'.$this->urlImg.'/sep.gif"></TD>';
$layer.='<TD width=3></TD>';
$layer.='<TD width=3 background="'.$this->urlImg.'/ldr.gif"></TD>';
$layer.='</TR>';
}
}while($gXML->SiguienteNodoHermano());
$layer.='<TR width='.$maxanchu.' height=3>'; // Linea de relleno
$layer.='<TD width=3 background="'.$this->urlImg.'/liz.gif"></TD>';
$layer.='<TD width=3></TD>';
$layer.='<TD colspan=4></TD>';
$layer.='<TD width=3></TD>';
$layer.='<TD width=3 background="'.$this->urlImg.'/ldr.gif"></TD>';
$layer.='</TR>';
$layer.='<TR width='.$maxanchu.' height=3>'; // Última linea
$layer.='<TD width=3 background="'.$this->urlImg.'/eii.gif"></TD>';
$layer.='<TD colspan=6 background="'.$this->urlImg.'/lin.gif"></TD>';
$layer.='<TD width=3 background="'.$this->urlImg.'/eid.gif"></TD>';
$layer.='</TR>';
$layer.='</TABLE>';
$layer.='<INPUT type=hidden value="-1">'; // Representará el índice seleccionado
$layer.='</DIV>';
}
return($layer);
}
}
?>
|