tecnica

Menu gerarchico a cascata

 

Massimo Valente

 

 

Rappresenta la soluzione pi∙ efficace per consentire al visitatore la navigazione ordinata e funzionale di un sito Web che abbia un minimo di complessitα. Un esempio ci permette di illustrarne codice e struttura…

 


La staticitα del linguaggio standard del Web, infatti, non ha finora permesso l’inserimento di elementi dinamici, se non attraverso l’adozione di controlli ActiveX o Applet Java. Le potenzialitα del Dynamic Html permettono di evitare l’uso di applicazioni esterne, grazie all’inserimento nel documento di codice JavaScript e all’utilizzo di fogli stile a cascata (CSS). L’esempio di menu gerarchico a cascata esaminato in queste pagine non Φ il solo reperibile in Rete nΘ, probabilmente, il pi∙ semplice da comprendere e configurare. Tale complessitα Φ giustificata dalla presenza di codice ½multipiattaforma╗, che rende compatibile l’esempio con le versioni di quarta generazione dei due browser pi∙ diffusi.
Sul CD-ROM allegato alla rivista Φ presente un altro esempio di menu gerarchico (con diversa struttura) compatibile esclusivamente con MS Internet Explorer. Vi rimandiamo a quell’esempio per un confronto col codice che andremo a esaminare.
HTML 4.0 consente fogli stile e codice Javascript in file esterni indipendenti dal documento, assegnando loro un’estensione css e js. In questo modo si ha un duplice vantaggio: la struttura del codice sorgente del documento Html Φ alleggerita e semplificata e, soprattutto, il file esterno .js o css viene condiviso, grazie a un semplice richiamo, da pi∙ documenti i quali non dovranno far altro che recuperarlo dalla cache del browser. In questo modo il volume di trasferimento dati che si genera dal lato server al lato client diminuisce considerevolmente. La struttura del menu gerarchico che si va a esaminare si compone di quattro file:

menu.htm
menu.js
arrays.js
immagine.gif

L’esempio Φ rivolto alla realizzazione di un menu che visualizzi un massimo di tre livelli gerarchici, ma altri possono essere aggiunti o rimossi. Essendo una struttura gerarchica i menu superiori annidano, a loro volta, menu inferiori. Seguendo la sintassi JavaScript si definiscono ½parent╗ i menu che annidano altri menu, e ½child╗ quelli annidati.
╚ ovvio, alla luce di quanto descritto, che il menu intermedio tra il pi∙ alto e il pi∙ basso della gerarchia Φ annidato in quello superiore e annidi contemporaneamente quello inferiore.


Menu.htm


Il file menu.htm contiene all’interno del tag <HEAD> una parte, seppur minima, di codice JavaScript.
La prima parte contenuta tra <SCRIPT></SCRIPT> determina tipo e versione dei browser che possono accedere al documento. Come precedentemente accennato, quest’esempio Φ visualizzabile solo con le versioni 4 di Netscape Navigator e Internet Explorer. La seconda parte contiene alcuni parametri variabili che permettono di modificare, attraverso la manipolazione dei valori, l’aspetto e la struttura del menu. Nel dettaglio, i parametri modificabili sono riportati nella tabella. Il parametro overFnt modifica dinamicamente il colore del testo quando la voce di menu viene selezionata (da black a white). Tale effetto per≥, per le ben note incompatibilitα tra Navigator ed Explorer, Φ apprezzabile solo per gli utenti del browser Microsoft. In IE, poi, il puntatore del mouse assume, quando Φ selezionata una voce attiva, l’aspetto di una mano (hand). La terza parte di codice JavaScript richiama, attraverso i due riferimenti:

Document.write("<SCRIPT LANGUAGE='JavaScript' SRC='arrays.js'><\/SCRIPT>");
document.write("<SCRIPT LANGUAGE='JavaScript' SRC='menu.js'><\/SCRIPT>");

i due file .js esterni contenenti il codice necessario al corretto funzionamento del menu. Tali riferimenti sono fondamentali e non possono in alcun modo essere omessi; a meno che il codice JavaScript venga inserito all’interno del documento Html, ovvero venga cambiato nome ai file collegati.
All’interno del tag <BODY> vengono definiti i livelli dell’oggetto array, attraverso l’assegnazione di variabili con prefisso arMenu:

<A HREF="/" onMouseOver="popUp('elMenu1',event)" onMouseOut="popDown('elMenu1')">Menu gerarchico a cascata</A>

Il gestore di eventi onMouseOver considera la posizione del puntatore del mouse in riferimento a un collegamento ipertestuale, e richiama la funzione popUp. elMenu Φ il primo argomento di popUp e non va confuso con l’oggetto array. Gli argomenti sono oggetti, valori o variabili richiesti per l’elaborazione di un metodo o di una funzione, e lavorano esclusivamente con riferimento a esse. In particolare, onMouseOver Φ attivato quando il puntatore del mouse abbandona l’area del link testuale. Al contrario onMouseOut viene attivato quando il puntatore entra nell’area di link. La funzione popDown Φ necessaria a Navigator, mentre Internet Explorer passa implicitamente l’oggetto event a ogni funzione che lo richiami.


Arrays.js

Gli array rappresentano, in JavaScript, uno strumento per indicizzare le informazioni come collezioni ordinate di dati. Il file     arrays.js sviluppa, in quest’ottica, il contenuto di ogni voce presente nel menu.

arMenu1 = new Array

("Argomento A","http://inews.tecnet.it",1,)

Il testo da assegnare alla voce di menu e il relativo link, vanno inseriti tra apici doppi. Il valore 1 indica l’esistenza di un menu ½child╗ annidato. Un valore pari a 0, invece, indica l’assenza di link annidati.
L’oggetto array arMenu1 si trova al livello pi∙ alto della gerarchia, e da esso discendono tutti gli altri. arMenu1 viene richiamato dall’elemento elMenu1 presente nel file menu.htm. Per creare livelli che discendono da arMenu1 Φ necessario creare ulteriori menu ½child╗. Per fare questo si adotta una numerazione progressiva:

arMenu1_1 = new Array
arMenu1_2 = new Array
arMenu1_3 = new Array

Per inserire un altro menu ½child╗ a un livello gerarchico inferiore, per esempio, in arMenu1_1, Φ sufficiente inserire una numerazione del tipo:

arMenu1_1_1 = new Array
arMenu1_1_2 = new Array

Si consideri, come esempio chiarificatore, di voler aggiungere un terzo livello di menu inferiore (di nome ½Argomento A3╗) al seguente codice:

arMenu1_1 = new Array(
"Argomento A1","http://inews.tecnet.it",1,
"Argomento A2","http://inews.tecnet.it",1

Va inserita una semplice stringa di codice con suffisso 1, che aggiunge il riferimento al nuovo livello ½child╗:

arMenu1_1 = new Array
("Argomento A1","http://inews.tecnet.it",1,
"Argomento A2","http://inews.tecnet.it",1,
"Argomento A3","http://inews.tecnet.it",1)

Giα sono presenti due livelli ½child╗ che fanno riferimento a

Argomento A1 e Argomento A2:
arMenu1_1_1 = new Array
("Link 01","http://inews.tecnet.it",0,)
arMenu1_1_2 = new Array
("Link 01","http://inews.tecnet.it",0,)

A questi va aggiunto un terzo livello di nome arMenu1_1_3:

arMenu1_1_3 = new Array
("Link 01","http://inews.tecnet.it",0,)

 

Menu.js

Il file menu.js contiene gran parte del codice JavaScript. La sua struttura Φ complessa e risente, come giα accennato, della pesantezza dovuta al doppio codice per il corretto funzionamento con Navigator ed Explorer.
Per esempio, la funzione popUp che assegna al mouse le coordinate X e Y deve essere espressa cos∞:


function popUp(menuName,e)

{

if (!areCreated) return;

hideAll();

currentMenu = eval(menuName);

xPos = (NS4) ? e.pageX : event.x;

yPos = (NS4) ? e.pageY : event.y;

currentMenu.moveTo(xPos,yPos);

}

Ci≥ in quanto Navigator assegna le coordinate in riferimento a xPos e yPos, mentre Explorer si serve di event.x ed event.y.

Le numerose incompatibilitα tra i due browser pi∙ diffusi sono tra le cause principali dello scarso utilizzo di Dynamic Html da parte degli sviluppatori Web. La complessa struttura dell’esempio esaminato in queste pagine, Φ sintomatica dei limiti oggettivi che l’utenza non professionale pu≥ incontrare nella gestione di codice doppio. La causa di una tale stortura va ricercata nelle diverse strategie di sviluppo che Microsoft e Netscape hanno adottato. L’impressione, supportata dai fatti, Φ che da tale contrapposizione sarα il modello di Microsoft a imporsi come standard per il futuro Dynamic Html.
Il modello proposto da Netscape ha nei layer e nei JSSS i suoi punti qualificanti; ma proprio su tali strumenti il W3C si Φ pronunciato negativamente, rifiutandone la standardizzazione.
I layer sono stati introdotti in Navigator 4, che a tutt’oggi Φ l’unico browser che li supporti. I layer (livelli) sono sezioni indipendenti di una pagina Html, e come tali possono essere sovrapposti gli uni agli altri fino a un massimo di 10 livelli. Attraverso manipolazioni pi∙ o meno complesse dei singoli livelli, Φ possibile creare animazioni ed effetti speciali, oltre a posizionare in modo dinamico testi e oggetti all’interno della pagina. Netscape riconosce tali strumenti attraverso la marcatura <LAYER>, <SPAN> o <DIV>, mentre Microsoft riconosce soltanto gli ultimi due tag.
Altro punto fondamentale della visione di Netscape per DHTML sono i fogli di stile Java Assisted (JSSS). Attraverso i JSSS, Netscape controlla la formattazione del testo e la disposizione degli elementi della pagina. Per fare questo, JSSS introduce tre nuovi modelli: ½tags╗, ½classes╗ e ½ids╗, che permettono di definire il valore di ogni singolo attributo del documento. Il limite maggiore dei fogli di stile JSSS Φ nell’impossibilitα di modificare il contenuto della pagina una volta caricata. A differenza di quanto accade con i fogli di stile CSS1, infatti, all’atto del caricamento di un documento, gli stili diventano definitivi. La soluzione al problema delle incompatibilitα tra Netscape ed Explorer, va trovata nella ricerca di uno standard comune che porti i due contendenti su una strada di sviluppo univoco. Agli sviluppatori di siti Web non rimane che sperare nel futuro e, nel breve periodo, servirsi di un editor (come Macromedia Dreamweaver) che generi automaticamente codice compatibile con IE4 e NN4.

(mvalente@tecnet.it)
 



Internet News Φ un mensile della Casa Editrice Tecniche Nuove S.p.A.
⌐ 1995/99. Tutti i diritti sono riservati.
Internet News non risponde di eventuali errori e omissioni.
Commenti a: inews@tecnet.it