Creazione dinamica di oggetti del File System

di Francesco Lomonaco, in COM & WebClass,

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""-->"
2 pagine in totale: 1 2
Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti