L'argomento di questo articolo sarà la creazione dinamica ed automatizzata di directory e file persistenti a partire dai contenuti di un database, per sua natura dinamico.
La creazione di pagine dal contenuto variabile è un argomento basilare per gli sviluppatori di Active Server Pages poiché consente di non dovere manutenere manualmente parecchie pagine simili. Un modo molto comodo e utilizzato per far cambiare dinamicamente il contenuto alla stessa pagina è quello di utilizzare URL del tipo www.sito.com/categoria/pagina.asp?campo=valore
Anche se questa è una tecnica validissima, può succedere che si preferisca avere delle pagine non completamente generate al volo, ad es. per problemi legati alla indicizzazione delle pagine nei motori di ricerca.
Cosa ci aspetterà però se sceglieremo di rinunciare a quel piccolo comodo punto interrogativo? Molto probabilmente saremo costretti a trascorrere penose ore a creare, cancellare e modificare le pagine ogni volta che dobbiamo apportare delle modifiche alle categorie del database o quando semplicemente vogliamo cambiare i criteri di assegnazione dei nomi.
Gli strumenti per operare
Lo script riportato in questo articolo consente di creare in poco tempo file persistenti e directory. Tutto quello che serve per provarlo è una semplice tabella di database come riportato in Tabella 1 , oltre a ciò che normalmente necessita quando si utilizzano ASP e ADO.
Tabella 1
CATEGORIE |
ID |
Categoria |
URL |
Bisognerà inoltre integrare lo script con le parti mancanti relative alla creazione della connessione e del recordset.
Il nostro scopo sarà quello di mostrare come:
- stabilire un criterio generale per l'assegnazione dinamica dei nomi agli oggetti
- creare un file per ogni categoria, scrivendo in esso il valore di una variabile da processare successivamente in una query (noi non ci occuperemo di questo) e un SSI che faccia da template
- creare una directory per ogni categoria
- aggiornare il campo URL della tabella CATEGORIE
Sarà inoltre indicato come e dove aggiungere codice per annidare directory e file di secondo livello.
Il codice
Iniziamo dichiarando una variabile che conterrà il valore di una SELECT per delimitare lo spazio del recordset.
Dim QueryCategoria QueryCategoria = "Select Categoria FROM CATEGORIE;"
Dopo avere creato le istanze degli oggetti Connection e Recordset viene inizializzata una variabile con un valore numerico incrementabile che tornerà utile per il conteggio degli oggetti creati e per l'attribuzione dei nomi
Dim NumeroProgressivo NumeroProgressivo = 1 NumeroProgressivo = CLng(NumeroProgressivo)
Si aziona un ciclo che sposterà gradualmente il cursore del recordset
While Not NostroRecordset.EOF
Viene passato il valore del campo Categoria ad una variabile
Dim nomeCategoria nomeCategoria=NostroRecordset("Categoria")
Per l'assegnazione dei nomi è stato scelto di prendere le prime otto lettere della variabile nomeCategoria e di elimininare gli eventuali spazi con Replace
Dim OttoLettereXCategoria OttoLettereXCategoria=Lcase(mid(nomeCategoria,1,8)) OttoLettereXCategoria=replace(OttoLettereXCategoria, " ", "")
Adesso, avendo stabilito il nome per gli oggetti di primo livello, bisognerà invocare il FileSystemObject per la loro realizzazione
Dim CreaNuoviOggettiXCategoria Set CreaNuoviOggettiXCategoria=CreateObject("Scripting.FileSystemObject")
Si fornisce ora la posizione per i nuovi file. Viene passato il valore della variabile di denominazione degli oggetti per indicare quale nome verrà assegnato e si aggiunge il suffisso ".asp"
Dim PercorsoNuoviFileXCategoria PercorsoNuoviFileXCategoria = ("C:\InetPub/www.nostrosito.xxx/" & OttoLettereXCategoria & ".asp")
Si procede in maniera analoga per la realizzazione delle directory evitando ovviamente di inserire il suffisso ".asp" nel nome
Dim PercorsoNuoveDirectoryXCategoria PercorsoNuoveDirectoryXCategoria = ("C:\InetPub/www.nostrosito.xxx/" & OttoLettereXCategoria)
Nelle righe seguenti si invoca la proprietà CreateTextFile del FileSystemObject per creare i nuovi file. Grazie all'istruzione condizionale si evita un errore nel caso in cui sia presente un file con lo stesso nome.
Dim SeiLettereXCategoria If CreaNuoviOggettiXCategoria.FileExists(PercorsoNuoviFileXCategoria) Then SeiLettereXCategoria=Lcase(mid(nomeCategoria,1,6)) SeiLettereXCategoria=Replace(SeiLettereXCategoria, " ", "") PercorsoNuoviFileXCategoria = ("C:\InetPub/www.nostrosito.xxx/" & SeiLettereXCategoria & NumeroProgressivo & ".asp") end if CreaNuoviOggettiXCategoria.CreateTextFile(PercorsoNuoviFileXCategoria)
Si segue lo stesso procedimento per la creazione delle directory
If CreaNuoviOggettiXCategoria.FolderExists(PercorsoNuoveDirectoryXCategoria) Then SeiLettereXCategoria=Lcase(mid(nomeCategoria,1,6)) SeiLettereXCategoria=Replace(SeiLettereXCategoria, " ", "") PercorsoNuoveDirectoryXCategoria = ("C:\InetPub/www.nostrosito.xxx/" & SeiLettereXCategoria & NumeroProgressivo) end if CreaNuoviOggettiXCategoria.CreateFolder(PercorsoNuoveDirectoryXCategoria)
Adesso sarà opportuno inserire l'URL dei nuovi file nel campo URL della tabella. Bisognerà innanzi tutto sostituire a "C:\InetPub/" il prefisso "http://" per renderlo Internet-compatibile
Dim IndirizzoNuovoFile IndirizzoNuovoFile=Replace(PercorsoNuoviFileXCategoria, "C:\InetPub/", "http://")
Si dichiara una variabile per una query di aggiornamento
Dim AggiornaURL AggiornaURL = "UPDATE CATEGORIE SET CATEGORIE.URL= '"&IndirizzoNuovoFile&"' " &_ " WHERE CATEGORIE.Categoria='"&nomeCategoria&"';"
Viene creata un'istanza di ADODB.Command e si richiamano la connessione attiva e la query di aggiornamento
Dim cmdURL Set cmdURL = Server.CreateObject("ADODB.Command") cmdURL.ActiveConnection = NostraConnessione cmdURL.CommandText = AggiornaURL cmdURL.execute
Al momento le pagine realizzate sono vuote. Tramite l'OpenTextFile si scriveranno all'interno dei file alcune righe per il codice. Per generare delle pagine dal contenuto dinamico viene inserita e inizializzata una variabile con il nome della categoria. Subito dopo si inserisce un SSI che richiamerà un file con una query di selezione appropriata e che fungerà anche da modello.
Dim apriOggetto Set apriOggetto=CreaNuoviOggettiXCategoria.OpenTextFile(PercorsoNuoviFileXCategoria, 2, True) Dim percent percent=chr(37) ApriOggetto.WriteLine "<" & percent & "VariabileCategoria="""&nomeCategoria&"""" & percent & ">" & " <!--#include virtual=""/www.nostrosito.xxx/cartellaModelli/fileModello.asp""-->"
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.