Il file default.htm ha il compito di costruire un frameset con due righe, di cui la prima sarà il frame Top, e la seconda contiene a sua volta un frameset con due colonne, il frame Left e il frame Right. Deve inoltre assegnare un file a ciascun frame. Se la vita fosse semplice, basterebbe che default.htm costruisse il frameset e assegnasse ai tre frames i tre file Top.htm (quello con logo e barra di navigazione), home/Home_left.htm (quello con i motori di ricerca) e home/Home_right.htm (quello con le foto).
Il guaio è che default.htm può anche essere richiamato da una pagina fuori frameset . In tal caso dovrà sistemare la pagina che lo ha invocato nel frame Right, nel frame Left l'appropriato menu e nel frame di sinistra l'appropriato file Top con il pulsante giusto attivo. Ecco quindi le operazioni eseguite dal codice javascript in default.htm:
1) Esamina la location, cioè l'URL con cui è
stato chiamato, per vedere se sono stati passati parametri e stabilisce di conseguenza
quali sono i tre file da assegnare ai tre frame
2) già che c'è, controlla di essere a sua volta il frameset principale,
altrimenti dà una spallata al frameset ospite e gli si sostituisce
3) A questo punto lo script scrive nel documento il
codice HTML appropriato! Di fatto è stata generata una pagina HTML dinamica
sul lato client...
C'è infatti un problema di pura gentilezza nei confronti dei 2 (due)
utenti che finora hanno visitato il sito senza poter vedere i frames (Netscape
3, mi sembra), ma soprattutto non piace moltissimo ai motori di ricerca il fatto
che la homepage del sito, con tutte le dichiarazioni di parole chiave, descrizioni
ecc, contenga in realtà solo tre righe di HTML per scrivere un frameset
(anzi, a questo punto nessuna, visto che lo scrive al volo il javascript).
Ecco quindi il tag <noframes> seguito da una versione senza frames della
homepage. Sarebbe meglio aggiornarla ogni tanto (tre mesi?),
salvandoci dentro il codice del <body> della home/Home_left.htm, magari
ripulito dai link javascript, e senza scalzare la barra di navigazione (quella
in <h3>...</h3> prima di <table>)
Le pagine più significative, tipo indici o pagg di attualità, possono essere individuate e restituite da motori di ricerca o possono essere bookmarkate o e-mailate, o potrebbero apparire in frames di siti altrui(!). Si configura quindi il rischio che vengano aperte fuori dal frameset originale, perdendo così il contesto e la navigazione. Per questo tali pagine devono riportare un codice javascript nell'<head>. Supponiamo che la pagina sia risorse/informatica/indice_informatica.htm; allora lo script sarà il seguente:
<head>
...
<script type="text/javascript" language="JavaScript"><!--
if ((top == self) || (parent.frames[1].name != 'Left')||(parent.frames[1].location
== 'http://www.majoranaorvieto.org/home/Home_left.htm')) {
var newURL = '../../default.htm?Top_risorse.htm&risorse/Risorse_left.htm&risorse/informatica/indice_informatica.htm'
if (document.images)
top.location.replace(newURL);
else
top.location.href = newURL;
}
//--></script>
</head>
La prima parte, sempre uguale, controlla se il frameset è mancante oppure
non è quello corretto.
../../default.htm richiama il
frameset originale con un riferimento relativo alla pagina
che si sta tentando di aprire; in questo caso bisogna risalire di due
livelli per arrivare alla root del sito: occorre regolare a mano
il numero di ../
Al frameset vengono poi passati tre parametri che indicano, con un percorso
relativo alla root del sito, i file da caricare nei tre frames:
1) il file da caricare nel frame superiore (Top): qui Top_risorse.htm
2) il file da caricare nel frame di sinistra: qui risorse/Risorse_left.htm
3) il percorso (con un riferimento relativo alla root del sito)
del file da caricare nel frame di destra: qui risorse/informatica/indice_informatica.htm
Attualmente le pagine contenenti il codice javascript sono tutte quelle indicizzate nel motore di ricerca interno. Ovvio che più sono, meglio è.
Il file Top.htm contiene, oltre al logo del sito, la barra di navigazione.
Una serie di funzioni javascript generate da dreamweaver precaricano per ogni
pulsante le relative immagini di partenza, con il mouse sopra al pulsante e
con il pulsante attivo. Inizialmente risulta attivo il pulsante "Home".
Quando un pulsante viene cliccato, viene visualizzata la relativa immagine di
pulsante attivo (quella dorata) e ripristinata quella standard per tutti gli
altri pulsanti. Inoltre devono venir caricati i file appropriati alla sezione
(Europe, POF, ecc) nei frames Left e Top. La gestione di due frames non è
prevista da dreamweaver, e viene assicurata da apposite funzioni javascript
che sono state aggiunte.
Ad esempio, per il tasto Europe:
function europe()
{
parent.Left.location.href="europe/Europe_left.htm";parent.Right.location.href="europe/Europe_right.htm";
}
Però home/Home_right.htm, a sua volta, può richiedere
il passaggio a una pagina che appartiene a una sezione del sito, a partire da
un link. In tal caso, oltre a caricare i file appropriati nei frame Left e Right,
deve anche cambiare il pulsante attivo. Una operazione simile può essere
richiesta da un file che si riscrive il frameset.
Per semplificare il passaggio (o, più onestamente, per aggirare il problema
di sviscerare la gestione dreamweaver della barra di navigazione) sono stati
costruiti tanti file Top_NomeSezione.htm, che differiscono solo per il pulsante
attivo di default. Se per esempio a un certo punto viene montato il file Top_risorse.htm,
da quel momento in poi la navigazione tra le sezioni continuerà utilizzando
quest'ultimo come niente fosse. Certo che non è elegante, ma funziona!
Home_right contiene una serie di link a pagine specifiche che si trovano in
diverse sezioni. L'effetto che ogni link deve ottenere è triplice:
1) deve caricare nel frame Top il corretto file Top_NomeSezione.htm
2) deve caricare nel frame Left il corretto file NomeSezione_left.htm
3) deve caricare nel frame Right la pagina linkata
Per ottenere tutte queste cose è necessario linkare a un javascript,
la funzione PP_jump(Cartella,File).
Ad esempio, per i corsi ECDL, il link nella home page è:
<a href="#" onClick="PP_jump('progetti','../progetti/ecdl/manifesto.htm')">
corsi di informatica</a>
Qui il primo parametro, progetti,
indica la cartella relativa alla sezione; il secondo parametro, ../progetti/ecdl/manifesto.htm,
è il percorso del file relativo alla Home_right.htm.
Forse la procedura meno peggio per preparare un nuovo link è la seguente:
1) selezionare il testo da linkare, ad esempio 5 dicembre
2) nel pannello delle proprietà, digitare nel campo del collegamento
# e premere invio (viene creato il codice
<a href="#">5 dicembre</a>)
3) cliccando sulla cartella gialla selezionare il file bersaglio del collegamento
4) copiare il percorso dal campo URL nella
finestra di dialogo, nell'esempio ../lavagna/esami/esami_indice.htm
poi chiuderla con annulla
5) modificare il codice del link in modo che diventi
<a href="#" onClick="PP_jump('nome_sezione','URL_file')">5
dicembre</a>, nell'esempio:
<a href="#" onClick="PP_jump('lavagna','../lavagna/esami/esami_indice.htm')">5
dicembre</a>